C++学习-构造函数(续)

// 测试代码如下

 class CTest

{

public:

     int m_test;

public:

    CTest()

    {

        cout<<"CTest() m_test = "<<m_test<<endl;

        CTest(100);

        cout<<"####### m_test = "<<m_test<<endl;

    }

    CTest(int i) : m_test(i)

    {

        cout<<"CTest(int i) m_test = "<<m_test<<endl;

    }

    ~CTest()

    {

        cout<<"~CTest()"<<endl;

    }

}



void main()

{

    CTest tmp;

    cout<<tmp.m_test<<endl;

}


问:为什么最后输出的不是100?

答:main函数中,tmp对象,在调用构造函数CTest()时,其对象本事还未被创建,此默认构造函数中调用另一构造函数CTest(int i),其结果是构造函数CTest(int i)生成一匿名临时对象,并对此对象调用CTest(int i),然后在退出CTest()时,匿名对象被释放。此时tmp对象创建成功,但成员变量并未初始化,cout<<tmp.m_test<<endl;具体输出结果不可知。查看程序上面的构造和析构函数输出即可知。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值