返回

代际传承:基类与派生类的对象赋予

后端

基类和派生类对象赋值转换的规则

  1. 派生类对象可以赋值给基类对象 。这是因为派生类对象是基类对象的扩展,所以它可以兼容基类对象。例如,如果有一个基类 Animal,派生类 Dog 继承自 Animal,那么 Dog 对象可以赋值给 Animal 对象。
  2. 派生类对象可以赋值给基类指针 。这是因为基类指针可以指向派生类对象。例如,如果有一个基类指针 Animal *animalPtr,派生类 Dog 对象 dog 可以赋值给 animalPtr。
  3. 派生类对象可以赋值给基类引用 。这是因为基类引用可以引用派生类对象。例如,如果有一个基类引用 Animal &animalRef,派生类 Dog 对象 dog 可以赋值给 animalRef。

基类和派生类对象赋值转换的注意事项

  1. 当派生类对象赋值给基类对象时,派生类对象中特有的属性和方法将被舍弃 。这是因为基类对象只能访问基类中的属性和方法。
  2. 当派生类对象赋值给基类指针时,基类指针只能访问派生类中的基类属性和方法 。这是因为基类指针只能指向基类对象。
  3. 当派生类对象赋值给基类引用时,基类引用只能引用派生类中的基类属性和方法 。这是因为基类引用只能引用基类对象。

基类和派生类对象赋值转换的示例

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 只