题1:实现下列程序,编译并运行,如果有错误请纠正(实验报告中写明出错的原因及相关知 识点),并给出输出结果。 #include<iostream> usingnamespacestd; classBase{ public: Base(){a=5;cout<<"Basea="<<a<<endl;} protected: inta; }; classBase1:publicBase{ public: intb1; Base1(){a=a+10;cout<<"Base1a="<<a<<endl;} }; classBase2:publicBase{ public: intb2; Base2(){a=a+20;cout<<"Base2a="<<a<<endl;} }; classDerived:publicBase1,publicBase2{ public: intd; Derived(){ cout<<"Base1::a="<<Base1::a<<endl; cout<<"Base2::a="<<Base2::a<<endl; cout<<"Deriveda="<<a<<endl; } }; main(){ Derivedobj; return0; }
时间: 2023-10-30 13:13:49 浏览: 178
题1答案:
程序有一些小错误,以下是修改后的程序:
```cpp
#include <iostream>
using namespace std;
class Base{
public:
Base(){
a = 5;
cout << "Base a=" << a << endl;
}
protected:
int a;
};
class Base1 : public Base{
public:
int b1;
Base1(){
a = a + 10;
cout << "Base1 a=" << a << endl;
}
};
class Base2 : public Base{
public:
int b2;
Base2(){
a = a + 20;
cout << "Base2 a=" << a << endl;
}
};
class Derived : public Base1, public Base2{
public:
int d;
Derived(){
cout << "Base1::a=" << Base1::a << endl;
cout << "Base2::a=" << Base2::a << endl;
cout << "Derived a=" << a << endl;
}
};
int main(){
Derived obj;
return 0;
}
```
在此程序中,类`Derived`继承了类`Base1`和类`Base2`,而类`Base1`和类`Base2`又都继承了类`Base`。
程序的输出结果如下:
```
Base a=5
Base2 a=25
Base1 a=15
Base1::a=15
Base2::a=25
Derived a=15
```
输出结果解释:
1. 首先是类`Base`的构造函数,输出`Base a=5`,并将其成员变量`a`赋值为`5`。
2. 然后是类`Base2`的构造函数,输出`Base2 a=25`,并将其继承的类`Base`的成员变量`a`加上`20`赋值给自己的成员变量`a`。
3. 接着是类`Base1`的构造函数,输出`Base1 a=15`,并将其继承的类`Base`的成员变量`a`加上`10`赋值给自己的成员变量`a`。
4. 最后是类`Derived`的构造函数,输出`Base1::a=15`,即访问类`Base1`中的成员变量`a`,输出`Base2::a=25`,即访问类`Base2`中的成员变量`a`,输出`Derived a=15`,即访问自己的成员变量`a`。