#include <iostream> using namespace std; class person { public: int ma; }; class son1 :virtual public person { }; class son2 :virtual public person { }; class fact :public son1, public son2 { }; int main() { son1 a; a.ma = 10; fact s; cout << s.ma << endl; s.son2::ma = 49; cout << s.ma << endl; return 0; }
时间: 2024-03-18 20:45:56 浏览: 76
这段代码是一个简单的 C++ 程序,定义了一个名为 `person` 的基类和两个派生类 `son1` 和 `son2`,这两个派生类都通过 `virtual public` 继承了 `person` 类,表示它们拥有 `person` 类的成员变量和成员函数。接着定义了一个名为 `fact` 的派生类,它通过 `public` 继承了 `son1` 和 `son2` 两个类,表示它拥有这两个类的成员变量和成员函数。
在 `main` 函数中,首先创建了一个 `son1` 类型的对象 `a`,并设置它的 `ma` 成员变量为 10。然后创建了一个 `fact` 类型的对象 `s`,因为 `fact` 类继承了 `son1` 和 `son2`,所以它也继承了 `person` 类的成员变量 `ma`。因为 `son1` 和 `son2` 都通过虚拟继承继承了 `person` 类,所以 `fact` 类中只有一个 `person` 类类型的成员变量 `ma`,而不是两个。
最后,程序输出了 `s.ma` 的值,由于没有给 `s.ma` 赋值,所以它的值是不确定的。接着,程序给 `s.son2::ma` 赋值为 49,这里使用了作用域解析运算符 `::`,表示访问 `son2` 类中的 `ma` 成员变量。最后再次输出 `s.ma` 的值,由于 `s` 对象中只有一个 `ma` 成员变量,所以此时 `s.ma` 的值是 `s.son2::ma` 赋的值,即 49。
相关问题
#include <iostream> using namespace std; //在此处补充你的代码 class Derived : public Base { public: int Bar(char x) { return (int)(-x); } int Bar(int x) { return (x / 2);
缺少代码结尾的大括号和分号。完整代码应该是这样的:
```
#include <iostream>
using namespace std;
class Base {
public:
Base() {}
virtual ~Base() {}
};
class Derived : public Base {
public:
int Bar(char x) {
return (int)(-x);
}
int Bar(int x) {
return (x / 2);
}
};
```
#include <iostream> using namespace std; class BaceClass { public: BaceClass(); }; BaceClass::BaceClass() { cout << "构造基类对象" << endl; }; class DerivedClass : public BaseClass { public: DerivedClass(); }; DerivedClass::DerivedClass() { cout << "构造派生类对象" << endl; } int main(int argc, char** argv) { DerivedClass d; return 0; }哪里错了
代码中有一个类名拼写错误,将 `BaceClass` 改为 `BaseClass` 即可,另外需要将基类的构造函数改为 `virtual`,否则派生类的构造函数不会调用基类的构造函数。
正确的代码如下:
```
#include <iostream>
using namespace std;
class BaseClass {
public:
virtual BaseClass();
};
BaseClass::BaseClass() {
cout << "构造基类对象" << endl;
};
class DerivedClass : public BaseClass {
public:
DerivedClass();
};
DerivedClass::DerivedClass() {
cout << "构造派生类对象" << endl;
}
int main(int argc, char** argv) {
DerivedClass d;
return 0;
}
```
阅读全文