多继承好麻烦

题目描述

下面的代码中,Derived 类公开继承自两个基类 BaseIntBaseDouble,因此它拥有这两个基类的所有公开成员。

但是课上提到过,如果这两个基类有同名的成员函数比如 func,那么就必须通过 obj.BaseName::func 来区分是哪个 BaseNamefunc。即便这两个函数的形参列表不同,即可以通过重载来区分,也无法直接简写为 obj.func

但是助教有强迫症,就是不想写 BaseName::。请你通过补全 Derived 的定义,使得两个基类的 set 成员函数可以直接用 obj.set 调用,通过实参类型来辨别调用哪一个函数。

关于输入

若干行。每行一个整数 i 和一个浮点数 d,空格分隔。

关于输出

对于每一行输入,输出 i,空格和 d。使用默认的输出格式。

参考答案

#include <iostream>

struct BaseInt {
private:
    int value;

public:
    void set(int x) { value = x; }
    int getInt() { return value; }
};

struct BaseDouble {
private:
    double value;

public:
    void set(double x) { value = x; }
    double getDouble() { return value; }
};

class Derived : public BaseInt, public BaseDouble {
public:
    void set(int x) { BaseInt::set(x); }
    void set(double x) { BaseDouble::set(x); }
};

int main() {
    Derived obj;
    int i;
    double d;
    while (std::cin >> i >> d) {
        obj.set(i), obj.set(d);
        std::cout << obj.getInt() << ' '
            << obj.getDouble() << std::endl;
    }
}





















 
 
 












#include <iostream>

struct BaseInt {
private:
    int value;

public:
    void set(int x) { value = x; }
    int getInt() { return value; }
};

struct BaseDouble {
private:
    double value;

public:
    void set(double x) { value = x; }
    double getDouble() { return value; }
};

class Derived : public BaseInt, public BaseDouble {
public:
    using BaseInt::set;
    using BaseDouble::set;
};

int main() {
    Derived obj;
    int i;
    double d;
    while (std::cin >> i >> d) {
        obj.set(i), obj.set(d);
        std::cout << obj.getInt() << ' '
            << obj.getDouble() << std::endl;
    }
}