多继承好麻烦
题目描述
下面的代码中,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;
}
}