子类调用父类构造函数的时机

26 篇文章 0 订阅

1 创建子类对象时,父类的构造函数先于子类构造函数被调用。(析构时,子类的析构函数先被调用)

2 如果父类有多个构造函数,在子类构造函数中若未指定,则调用父类的默认构造函数或者无参构造函数。否则,按照子类构造函数中指定的父类构造函数类型调用。请看下例

#include <iostream>
#include <string>

using namespace std;

class Weapon {
public:
    Weapon()
    {
        cout << "Weapon constructor" << endl;
    }

    Weapon(int value, string name) : m_value(value), m_name(name)
    {
        cout << "Weapon constructor"
            << ", value is: " << m_value
            << ", name is: " << m_name
            << endl;
    }

    virtual ~Weapon()
    {
        cout << "Weapon destructor" << endl;
    }
private:
    int m_value;
    string m_name;
};


class Sold : public Weapon {
public:
    Sold(float damage) : m_damage(damage) , Weapon(10, "killer") {
        cout << "Sold constructor"
            << ", damage is: "
            << m_damage
            << endl;
    }

    virtual ~Sold()
    {
        cout << "Sold destructor" << endl;
    }
private:
    float m_damage;
};

int main()
{
    Sold sold(27.8);
    return 0;
}

运行结果:

Weapon constructor, value is: 10, name is: killer
Sold constructor, damage is: 27.8
Sold destructor
Weapon destructor

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值