C++中构造函数和析构函数(virtual)的执行顺序

using namespace std;

class People
{
public:
    People(){
        cout << " Output from the structor of calss People!" << endl;
    };  // 构造函数
    virtual ~People(){
        cout << " Output from the destructor of calss People!" << endl;
    }; // 析构函数
    virtual void doSomething()
    {
        cout << "Do something in class People!" << endl;
    };

};

class Student : public People
{
public:
    Student(){
        cout << " Output from the structor of calss Student!" << endl;
    }; // 构造函数

    ~Student(){
        cout << " Output from the destructor of calss Student!" << endl;
    };// 析构函数
    void doSomething(){
        cout << "Do something in class Student!" << endl;
    };

}

int main() {

Student *stu1 = new Student();
    stu1->doSomething();
    delete stu1;

    cout << endl;

    People *stu2 = new Student();
    stu2->doSomething();
    delete stu2;
    return 0;

}


执行结果:

stu1:

 Output from the structor of calss People!
 Output from the structor of calss Student!
Do something in class Student!
 Output from the destructor of calss Student!
 Output from the destructor of calss People!
stu2:
 Output from the structor of calss People!
 Output from the structor of calss Student!
Do something in class Student!
 Output from the destructor of calss Student!
 Output from the destructor of calss People!

原文地址:https://www.cnblogs.com/bbsno1/p/3270904.html