当我们创建对象时,编译器总是帮我们自动调用构造函数,我们可以自己调用构造函数吗? 先看一个简单的程序,可以避免以后的编码过程中减少这种错误。
#include <stdio.h>
class Test
{
private:
int i;
int j;
const char* _s;
public:
Test()
{
printf("Test()\n");
i=0;
j=0;
}
Test(const char* s)
{
printf("Test(const char* s)\n");
Test();// 主动调用构造函数
_s =s;
}
~Test()
{
printf("~Test()\n");
}
void show()
{
printf("i=%d,j=%d,_s=%s\n",i,j,_s);
}
};
void run()
{
// Test("hello cjl");
Test t=Test("hello cjl");
t.show();
}
int main()
{
run();
return 0;
}
在Test(const char* s)函数中,我们主动调用Test()构造函数来帮我们对Test类的私有数据成员进行初始化,但是事实上,事情并不是我们想的那样的,这个可以从运行结果来看,i,j的值并没有初始化。
分析: 在Test(const char* s)函数中,我们直接调用构造函数,编译器会为我们产生一个临时对象,来存储这个初始化的值,当我们调用这个Test(const char* s)函数结束后,编译器也会自动销毁这个临时对象,所以没有为i,j初始化成功。