C ++初学者问题:构造函数

时间:2009-07-19 21:19:44

标签: c++

我刚刚遇到了构造函数的以下源代码。

testProg::testProg() : CCProg()  
{  
m_UID = n_UID = 0;  
}  

通常,根据我的理解,构造函数如下所示:

testProg::testProg()    
{    
m_UID = n_UID = 0;    
}    

所以我想知道这个CCProg()的目的是什么,如果有人会很棒 可以很快告诉我这里发生了什么。谢谢!

4 个答案:

答案 0 :(得分:16)

看起来testProg继承自CCProg,并且从testProg构造函数的initialization list调用了CCProg的no-args构造函数。

鉴于它是被调用的no-args构造函数,实际上并不需要显式调用(无论如何它都会被称为implicity)。因此,这种语法的主要用途是调用确实接受参数的父构造函数。

例如:

testProg::testProg(int days) : CCProg(days)  
{  
m_UID = n_UID = 0;  
}

这里,如果省略了显式调用,那么如果有一个可用的no-args构造函数将被称为implicity,否则编译将失败。

请注意,也可能(尽管不太可能),CCProg是属于testProg的成员变量的名称 - 同样,不需要显式调用no-args构造函数,因为它将被称为implicity。

答案 1 :(得分:6)

它是对基类构造函数的显式调用,如果类看起来像这样:

class testProg : public CCProg

或(不太可能)调用初始化成员变量,如果类看起来像这样:

class testProg
{
    Something CCProg;
    // ...

答案 2 :(得分:4)

或者:

  • class testProg派生自类 CCProg,或
  • class testProg有一个嵌入式 对象名为CCProg

在这两种情况下,它都是对CCProg构造函数的显式调用,因为它是一个无参数构造函数,允许调用但不是绝对必要的。

但是,如果CCProg有一个带有int参数的构造函数,则必须使用

之类的函数调用它。
testProg::testProg() : CCProg(1) { }

此语法允许您选择构造函数(如果CCProg具有多于1)并传递值。还要注意事情的发生顺序:在输入testprog监视器主体之前构造CCProg。

答案 3 :(得分:0)

这段代码的作用是它显式地调用了CCProg()类的构造函数。

在继承体系结构中,为了节省再次重写基类构造函数的工作量,我们可以使用这种技术。