1) 任务1 - 新建文件“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 void SetAge(int n) {age = n;} ^ ``` 把age改为公有成员变量后重新编译就可以了。
时间: 2024-02-12 17:06:12 浏览: 82
你的问题是关于C++程序的,需要声明一个基类Animal和派生类dog,并在dog类的成员函数中出现了一个错误。这个错误是因为age成员变量在Animal类中被设置为私有的,无法在dog类的成员函数中直接访问。要解决这个问题,需要将age成员变量从私有变成公有。代码如下:
```cpp
class Animal{
public:
int age;
};
class Dog : public Animal{
public:
void SetAge(int n) {age = n;}
};
```
这样就可以在dog类的成员函数中直接设置age变量的值了。
相关问题
新建文件“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
好的,你可以参考下面的代码实现:
```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。
阅读全文