返回
代际传承:基类与派生类的对象赋予
后端
2023-11-04 12:00:05
基类和派生类对象赋值转换的规则
- 派生类对象可以赋值给基类对象 。这是因为派生类对象是基类对象的扩展,所以它可以兼容基类对象。例如,如果有一个基类 Animal,派生类 Dog 继承自 Animal,那么 Dog 对象可以赋值给 Animal 对象。
- 派生类对象可以赋值给基类指针 。这是因为基类指针可以指向派生类对象。例如,如果有一个基类指针 Animal *animalPtr,派生类 Dog 对象 dog 可以赋值给 animalPtr。
- 派生类对象可以赋值给基类引用 。这是因为基类引用可以引用派生类对象。例如,如果有一个基类引用 Animal &animalRef,派生类 Dog 对象 dog 可以赋值给 animalRef。
基类和派生类对象赋值转换的注意事项
- 当派生类对象赋值给基类对象时,派生类对象中特有的属性和方法将被舍弃 。这是因为基类对象只能访问基类中的属性和方法。
- 当派生类对象赋值给基类指针时,基类指针只能访问派生类中的基类属性和方法 。这是因为基类指针只能指向基类对象。
- 当派生类对象赋值给基类引用时,基类引用只能引用派生类中的基类属性和方法 。这是因为基类引用只能引用基类对象。
基类和派生类对象赋值转换的示例
class Animal {
public:
string name;
int age;
void eat() {
cout << "Animal is eating." << endl;
}
};
class Dog : public Animal {
public:
string breed;
void bark() {
cout << "Dog is barking." << endl;
}
};
int main() {
Animal animal;
Dog dog;
animal = dog; // 派生类对象赋值给基类对象
Animal *animalPtr = &dog; // 派生类对象赋值给基类指针
Animal &animalRef = dog; // 派生类对象赋值给基类引用
return 0;
}
在这个示例中,派生类 Dog 对象 dog 被赋值给基类对象 animal、基类指针 animalPtr 和基类引用 animalRef。当 dog 对象被赋值给 animal 对象时,dog 对象中特有的属性 breed 和方法 bark() 将被舍弃。当 dog 对象被赋值给 animalPtr 时,animalPtr 只能访问 dog 对象中的基类属性 name 和 age,以及基类方法 eat()。当 dog 对象被赋值给 animalRef 时,animalRef 只