cpp中基类的 private 成员是能够被继承的,并且(成员变量)会占用派生类对象的内存,它只是在派生类中不可见,导致无法使用罢了。对吗?
时间: 2024-03-31 17:33:44 浏览: 11
不完全正确。在C++中,基类的私有成员确实会被继承到派生类中,但是它们不能被直接访问。这是因为在继承关系中,派生类对象只能访问公有成员和保护成员,而不能访问基类的私有成员。
此外,基类的私有成员不会占用派生类对象的内存空间,因为它们是在基类对象中定义的。派生类的对象只包含派生类新增的成员变量和基类的公有和保护成员变量。
相关问题
设计实验,验证基类成员在派生类中的访问属性(能否编译)。
为验证基类成员在派生类中的访问属性,可以设计如下实验:
1. 定义一个基类 Animal,包含一个私有成员变量 name 和一个公有成员函数 getName(),用于获取该动物的名字。
```cpp
class Animal {
private:
string name;
public:
string getName() { return name; }
};
```
2. 定义一个派生类 Cat,它继承自 Animal,包含一个公有成员函数 meow(),用于输出猫叫的声音。
```cpp
class Cat : public Animal {
public:
void meow() { cout << getName() << " is meowing" << endl; }
};
```
3. 在主函数中,创建一个 Cat 对象,调用它的 meow() 方法,并验证能否正常输出猫叫的声音。
```cpp
int main() {
Cat c;
c.meow();
return 0;
}
```
这个实验验证了基类 Animal 中的私有成员变量 name 在派生类 Cat 中无法直接访问,必须通过基类提供的公有成员函数 getName() 进行访问。如果派生类试图直接访问基类的私有成员变量,编译器会报错。因此,可以验证基类成员在派生类中的访问属性。
声明一个基类 animal,有私有整型成员变量 age,构造其派生类 dog,在其成员函数 set
基类 animal 的声明如下:
```cpp
class animal {
private:
int age;
public:
animal(int a = 0): age(a) {}
void setAge(int a) {
age = a;
}
int getAge() {
return age;
}
};
```
派生类 dog 的声明如下:
```cpp
class dog : public animal {
public:
void set(int a) {
setAge(a);
}
};
```
在派生类 dog 中,通过调用基类 animal 的 setAge 函数来设置 age 成员变量的值。