#include<iostream> using namespace std; class C { public: C(int a) { x = a; } private: int x; }; class D :public C { public: D(int a):y(a){} private: int y; }; 指出错误,并说明原因
时间: 2024-03-07 10:50:09 浏览: 73
C++实现校园运动会报名系统
在类D的构造函数中,没有显式调用基类C的构造函数,因为类D是从类C派生而来的。因为类C没有默认构造函数,所以必须显式调用基类C的构造函数并传递参数。所以错误的行为是在类D的构造函数中未显式调用基类C的构造函数。
正确的代码应该是这样的:
```cpp
#include <iostream>
using namespace std;
class C {
public:
C(int a) { x = a; }
private:
int x;
};
class D : public C {
public:
D(int a, int b) : C(a) { y = b; }
private:
int y;
};
int main() {
D d(1, 2);
return 0;
}
```
在类D的构造函数中,我们显式调用了基类C的构造函数并传递了参数a,这样,类D就可以正确地初始化基类C的成员变量x。
阅读全文