新建文件“lab7_1.cpp”,编写程序声明一个基类Animal,成员变量age是私有的。构成其派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下错误提示: ``` In member function ‘void Dog::SetAge(int)’: error: ‘int Animal::age’ is private int age; ^ error: within this context
时间: 2024-02-12 09:06:35 浏览: 72
cg2_基类BaseClass派生出类_noddedc1c_
5星 · 资源好评率100%
好的,你可以参考下面的代码实现:
```c++
#include <iostream>
using namespace std;
class Animal {
private:
int age;
public:
Animal(int a = 0) : age(a) {}
int GetAge() {
return age;
}
};
class Dog : public Animal {
public:
Dog(int a = 0) : Animal(a) {}
void SetAge(int n) {
//age = n; //这里会报错,age是私有变量,不能直接访问
Animal::age = n; //这里通过基类的作用域解析规则,访问了基类的私有变量age
}
};
int main() {
Dog dog;
dog.SetAge(2);
cout << "Dog's age is: " << dog.GetAge() << endl;
return 0;
}
```
在派生类Dog中,不能直接访问基类Animal的私有变量age,但是可以通过基类的作用域解析规则,访问基类的私有成员变量。在代码中,我们通过`Animal::age = n;`的方式,访问了基类的私有变量age,并赋值为n。
阅读全文