xyjzsh

c++构造函数间的调用

 

#include <stdio.h>

class CTest
{
public:
   CTest() 
{
     CTest(
0);
    
//已经调用析构函数
     printf("CTest()\r\n");
   }

CTest(
int i) {
     CTest(i, 
0);
    
//已经调用析构函数
     printf("CTest(%d)\r\n", i);
}

CTest(
int i, int j) {
       printf(
"CTest(%d, %d)\r\n", i, j);
}

virtual ~CTest(){
      m_CTestCount
++;
      printf(
" ~CTest() m_CTestCount = %d\r\n", m_CTestCount);
}

static int m_CTestCount;
}
;
int CTest::m_CTestCount = 0;
int main()
{
CTest cT;
printf(
"main()\r\n");
//调用析构函数
return 0;
}
调用CTest()时会产生一个临时变量。
如果想在构造函数间调用要用一下形式:
class CTest2
{
public:
    CTest2()
    
{
        a
=0;
        b
=0;
    }

    CTest2(
int _a)
    
{
        
this->CTest2::CTest2();
        a 
= _a;
        printf(
"in CTest2(int a) and a=%d,b=%d\n",a,b);
    }

    
~CTest2()
    
{
        printf(
"in destrcutor and c=%d\n",c);
    }

    
int a;
    
int b;
    
int static c;
}
;
注意 this->CTest2::CTest();
建议:
因为构造函数的特别,我们应该尽量避免构造函数间的调用
可以采用狗仔函数默认值的方式
以上为例:
CTest2(int _a=0,int_b=0);
这样就可以省去CTest2()这个默认构造函数。

posted on 2010-10-29 17:11 呆人 阅读(284) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜