1)声明一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。
时间: 2024-11-17 18:28:24 浏览: 21
实验4继承与派生(4学时)
5星 · 资源好评率100%
在面向对象编程中,如果你有一个基类`Animal`,它有一个私有整型成员变量`age`,比如:
```cpp
class Animal {
private:
int age;
public:
// 构造函数和其他公共成员函数
Animal(int initialAge) : age(initialAge) {}
// 其他方法...
};
```
当你尝试在派生类`Dog`中直接通过基类指针或引用调用`SetAge`方法并设置`age`的值时,因为`age`是私有的,所以编译器不会允许这样做,这会导致编译错误。试图访问私有成员通常被视为“非法访问”。
如果将`age`改为公有成员变量,那么就可以像下面这样操作:
```cpp
class Dog : public Animal {
public:
void SetAge(int newAge) { age = newAge; }
// 其他Dog特有的方法...
};
```
在这个例子中,`Dog`可以直接改变其`age`,因为它是公开的。但是,这样的设计可能会破坏封装原则,使得子类能够随意修改父类的内部状态。
你可以尝试在主程序中创建`Dog`实例并测试这个过程:
```cpp
int main() {
Animal* dog = new Dog(5); // 创建Dog对象,隐式调用了Dog的构造函数
// 正确的访问方式
dog->SetAge(6);
// 输出或检查dog的age
std::cout << "Dog's age: " << dog->age << std::endl;
delete dog;
return 0;
}
```
阅读全文