📜  C++ |继承|问题6(1)

📅  最后修改于: 2023-12-03 14:39:54.224000             🧑  作者: Mango

C++ |继承|问题6

继承是 C++ 中面向对象编程的核心概念之一,它可以让我们在已有的类的基础上创建出新的类,并且让新的类能够继承已有类的属性和方法。在使用继承时,我们需要了解一些问题,以免出现错误或者误解。

问题描述

在使用继承时,我们需要注意以下问题:

  1. 子类对象在创建时,会调用父类的构造函数。
  2. 子类对象在销毁时,会调用父类的析构函数。
  3. 子类可以使用父类中的公有成员和受保护成员,但不能使用私有成员。
  4. 父类中的构造函数和析构函数不会被继承。
代码示例

下面是一个简单的示例代码,用于说明使用继承时需要注意的问题:

#include <iostream>

using namespace std;

class Animal {
public:
    Animal() {
        cout << "Animal Constructor" << endl;
    }
    ~Animal() {
        cout << "Animal Destructor" << endl;
    }
    void eat() {
        cout << "Animal Eat" << endl;
    }
protected:
    void run() {
        cout << "Animal Run" << endl;
    }
};

class Cat : public Animal {
public:
    Cat() {
        cout << "Cat Constructor" << endl;
    }
    ~Cat() {
        cout << "Cat Destructor" << endl;
    }
    void catchMouse() {
        cout << "Cat Catch Mouse" << endl;
    }
};

int main() {
    Cat cat;
    cat.eat();
    cat.catchMouse();
    cat.run();
    return 0;
}

运行上述代码,输出结果如下:

Animal Constructor
Cat Constructor
Animal Eat
Cat Catch Mouse
Animal Run
Cat Destructor
Animal Destructor

从输出结果中,我们可以看到:

  1. 子类对象 Cat 在创建时,会先调用父类的构造函数,输出 Animal Constructor
  2. 子类对象 Cat 在销毁时,会先调用父类的析构函数,输出 Animal Destructor
  3. 子类对象 Cat 可以使用父类中的公有成员 eat() 和受保护成员 run()
  4. 父类 Animal 中的构造函数和析构函数不会被继承,因此在子类的构造函数和析构函数中需要分别调用父类的构造函数和析构函数。
总结

使用继承时,我们需要注意子类对象在创建和销毁时会自动调用父类的构造函数和析构函数,并且子类可以使用父类中的公有成员和受保护成员。同时,父类中的构造函数和析构函数不会被继承,需要在子类的构造函数和析构函数中分别调用父类的构造函数和析构函数。