我刚刚遇到了构造函数的以下源代码。
testProg::testProg() : CCProg()
{
m_UID = n_UID = 0;
}
通常,根据我的理解,构造函数如下所示:
testProg::testProg()
{
m_UID = n_UID = 0;
}
所以我想知道这个CCProg()的目的是什么,如果有人会很棒 可以很快告诉我这里发生了什么。谢谢!
答案 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)
或者:
在这两种情况下,它都是对CCProg构造函数的显式调用,因为它是一个无参数构造函数,允许调用但不是绝对必要的。
但是,如果CCProg有一个带有int参数的构造函数,则必须使用
之类的函数调用它。testProg::testProg() : CCProg(1) { }
此语法允许您选择构造函数(如果CCProg具有多于1)并传递值。还要注意事情的发生顺序:在输入testprog监视器主体之前构造CCProg。
答案 3 :(得分:0)
这段代码的作用是它显式地调用了CCProg()类的构造函数。
在继承体系结构中,为了节省再次重写基类构造函数的工作量,我们可以使用这种技术。