请指出下面程序中的错误代码并说出错误原因和改错方法include<iostream> using namespace std; class Base1{ protected: int m; public: void Show(){cout<<m<<endl;} } ; class Base2 { protected: int n; public: void Show(){cout<<n<<endl;} } ; class Derived:public Base1, public Base2 { public: void Set( int x, int y ) {m=x;n=y;} } ; int main() { Derived Obj; Obj. Set(45,87); Obj. Show(); return 0; }
时间: 2024-01-03 12:02:54 浏览: 126
错误代码如下:
```c++
#include <iostream>
using namespace std;
class Base1 {
protected:
int m;
public:
void Show() { cout << m << endl; }
};
class Base2 {
protected:
int n;
public:
void Show() {cout << n << endl;}
};
class Derived : public Base1, public Base2 {
public:
void Set(int x, int y) { m = x; n = y; }
using Base1::Show; // 解决方法1:引入 using 声明
};
int main() {
Derived Obj;
Obj.Set(45, 87);
Obj.Show(); // 错误:调用 Show() 不明确
return 0;
}
```
错误原因:`Derived` 类从两个基类继承了同名的 `Show()` 函数,导致在 `main()` 函数中调用 `Obj.Show()` 时编译器无法确定该调用哪个基类的 `Show()` 函数。
改错方法:
1. 引入 `using` 声明,显式指定调用哪个基类的 `Show()` 函数。
2. 修改派生类 `Derived` 中的 `Show()` 函数,避免与基类 `Base1` 和 `Base2` 的函数名称冲突。
阅读全文