多继承好麻烦
题目描述
下面的代码中,Derived 类公开继承自两个基类 BaseInt 和 BaseDouble,因此它拥有这两个基类的所有公开成员。
但是课上提到过,如果这两个基类有同名的成员函数比如 func,那么就必须通过 obj.BaseName::func 来区分是哪个 BaseName 的 func。即便这两个函数的形参列表不同,即可以通过重载来区分,也无法直接简写为 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;
}
}