Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;初学者问题:构造函数_C++ - Fatal编程技术网

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

C++ C++;初学者问题:构造函数,c++,C++,我刚刚遇到了一个构造函数的以下源代码 testProg::testProg() : CCProg() { m_UID = n_UID = 0; } 通常,根据我的理解,构造函数如下所示: testProg::testProg() { m_UID = n_UID = 0; } 所以我想知道这个CCProg()的目的是什么,如果有人 我可以很快告诉我这里发生了什么。谢谢 testProg似乎继承自CCProg,而CCProg的no-args构造函数

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

testProg::testProg() : CCProg()  
{  
m_UID = n_UID = 0;  
}  
通常,根据我的理解,构造函数如下所示:

testProg::testProg()    
{    
m_UID = n_UID = 0;    
}    
所以我想知道这个CCProg()的目的是什么,如果有人
我可以很快告诉我这里发生了什么。谢谢

testProg似乎继承自CCProg,而CCProg的no-args构造函数是从testProg构造函数的

假设正在调用的是无参数构造函数,那么实际上并不需要显式调用(不管怎样,它将被称为隐式)。因此,此语法的主要用途是调用不接受参数的父构造函数

例如:

testProg::testProg(int days) : CCProg(days)  
{  
m_UID = n_UID = 0;  
}
在这里,如果省略显式调用,则如果有可用的无参数构造函数,则会调用隐式构造函数,否则编译将失败


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

如果类如下所示,则它是显式调用基类构造函数:

class testProg : public CCProg
class testProg
{
    Something CCProg;
    // ...
或者(不太可能)调用初始化成员变量,如果类如下所示:

class testProg : public CCProg
class testProg
{
    Something CCProg;
    // ...
要么:

  • 类testProg派生自类 CCProg,或
  • 类testProg具有一个嵌入式 对象名为CCProg
在这两种情况下,它都是对CCProg构造函数的显式调用,并且因为它是一个无参数构造函数,所以允许调用,但严格来说不需要

然而,如果CCProg有一个带有int参数的构造函数,那么您必须使用类似

testProg::testProg() : CCProg(1) { }

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

此代码的作用是显式调用类CCProg()的构造函数


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

正确。对于OP的好处,在C++ LINGO中,这些被称为“构造函数初始化列表”。