可以直接调用构造函数吗??

来源:互联网 发布:剑道 自学 知乎 编辑:程序博客网 时间:2024/05/16 01:32

当我们创建对象时,编译器总是帮我们自动调用构造函数,我们可以自己调用构造函数吗? 先看一个简单的程序,可以避免以后的编码过程中减少这种错误。

#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初始化成功。





0 0