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;具体输出结果不可知。查看程序上面的构造和析构函数输出即可知。
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具