21xrx.com
2024-11-05 16:30:24 Tuesday
登录
文章检索 我的文章 写文章
C++中子类父类构造函数调用顺序及析构顺序解析
2023-07-05 10:14:09 深夜i     --     --
C++ 子类 父类 构造函数 调用顺序 析构顺序

C++中,构造函数的调用顺序和析构函数的调用顺序对于理解继承和多态很重要。在子类对象被创建时,父类构造函数会先被调用,然后是子类构造函数。在对象被销毁时,析构函数执行顺序相反:子类析构函数先被调用,然后是父类析构函数。

例如,假设我们有一个基类Animal和两个派生类Cat和Dog:


class Animal{

public:

  Animal()

    std::cout<<"构造Animal"<<std::endl;

  

  ~Animal()

    std::cout<<"析构Animal"<<std::endl;

  

};

class Cat: public Animal{

public:

  Cat()

    std::cout<<"构造Cat"<<std::endl;

  

  ~Cat()

    std::cout<<"析构Cat"<<std::endl;

  

};

class Dog: public Animal{

public:

  Dog()

    std::cout<<"构造Dog"<<std::endl;

  

  ~Dog()

    std::cout<<"析构Dog"<<std::endl;

  

};

当我们创建一个Cat对象时,先执行Animal构造函数,再执行Cat构造函数:


Cat c;

输出:


构造Animal

构造Cat

当我们销毁Cat对象时,先执行Cat析构函数,再执行Animal析构函数:


  Cat c;

输出:


构造Animal

构造Cat

析构Cat

析构Animal

这个过程同样适用于多层继承和虚继承。在多层继承中,构造函数会按照派生类继承层次逐级调用,析构函数则相反。而虚继承则需要额外处理虚基类的构造函数和析构函数。

在使用继承和多态的时候,正确理解构造函数和析构函数的调用顺序是很重要的。将它们考虑在内可以确保程序在运行时不会出现未定义的行为或内存泄漏的问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复