C++ 继承 构造函数、拷贝构造函数

本文通过具体的C++代码示例,详细介绍了类及其成员对象的构造与析构过程,包括构造函数、析构函数及拷贝构造函数的调用顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、整体代码

     01.cpp

#include <iostream>
using namespace std;
class ObjectB
{
public:
    ObjectB(int objb) : objb_(objb)
    {
        cout<<"ObjectB ..."<<endl;
    }
    ~ObjectB()
    {
        cout<<"~ObjectB ..."<<endl;
    }
    int objb_;
};
class ObjectD
{
public:
    ObjectD(int objd) : objd_(objd)
    {
        cout<<"ObjectD ..."<<endl;
    }
    ~ObjectD()
    {
        cout<<"~ObjectD ..."<<endl;
    }
    int objd_;
};
class Base
{
public:
    Base(int b) : b_(b), objb_(111)
    {
        cout<<"Base ..."<<endl;
    }
    Base(const Base& other) : objb_(other.objb_), b_(other.b_)
    {
	cout<<"Base ...copy"<<endl;
    }
    ~Base()
    {
        cout<<"~Base ..."<<endl;
    }
    int b_;
    ObjectB objb_;
};
class Derived : public Base
{
public:
    Derived(int b, int d) : d_(d), Base(b), objd_(222)
    {
        cout<<"Derived ..."<<endl;
    }
    Derived(const Derived& other) : d_(other.d_), objd_(other.objd_), Base(other)//调用了父类的拷贝构造函数
    {
	cout<<"Derived ...copy"<<endl;
    }
    ~Derived()//先执行方法体,再调用父类的析构函数
    {
        cout<<"~Derived ..."<<endl;
    }
    int d_;
    ObjectD objd_;
};
int main(void)
{
    Derived d(100, 200);//首先调用父类的objb_(111),然后是父类构造函数,之后是子类的objd_(222),最后是子类的构造函数
    //cout<<d.b_<<" "<<d.d_<<endl;
    //Base b1(100);//调用父类的构造函数
    //Base b2(b1);//调用父类拷贝构造函数
    //cout<<b2.b_<<endl;
    //Derived d2(d);//调用子类拷贝构造函数
    return 0;
}


二、运行结果

      ObjectB ...
      Base ...
      ObjectD ...
      Derived ...
     ~Derived ...//先析构对象
     ~ObjectD ...//再析构对象中的成员对象
     ~Base ...
     ~ObjectB ..


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值