Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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++ 父类中的构造函数没有';t将值赋给私有变量_C++_Oop_Inheritance_Constructor_Initialization - Fatal编程技术网

C++ 父类中的构造函数没有';t将值赋给私有变量

C++ 父类中的构造函数没有';t将值赋给私有变量,c++,oop,inheritance,constructor,initialization,C++,Oop,Inheritance,Constructor,Initialization,这是我的代码,您也可以从 #包括“iostream” 使用名称空间std; X类{ 私人: INTC; 公众: X(){} X(内部b){ c=11; } int getC(); }; Z类:公共X{ 公众: Z(整数n){ X(23); } }; int main() { Z(1); 不能你应该使用 在类构造函数的定义中,成员初始值设定项列表指定直接和虚拟基子对象以及非静态数据成员的初始值设定项 e、 g 我需要有X(){}行,因为子构造函数需要调用父默认构造函数 对于成员初始化器列表,不再需

这是我的代码,您也可以从

#包括“iostream”
使用名称空间std;
X类{
私人:
INTC;
公众:
X(){}
X(内部b){
c=11;
}
int getC();
};
Z类:公共X{
公众:
Z(整数n){
X(23);
}
};
int main()
{
Z(1);
不能你应该使用

在类构造函数的定义中,成员初始值设定项列表指定直接和虚拟基子对象以及非静态数据成员的初始值设定项

e、 g

我需要有
X(){}
行,因为子构造函数需要调用父默认构造函数

对于成员初始化器列表,不再需要它(在此代码示例中)

对于构造函数体中的
X(23);
,您只是创建了一个临时的
X
,它与
Z
的基本子对象
X
无关;然后将对其使用
X
的默认构造函数(即
X::X()

Z(int n) : X() {  // initialize the base suboject X via X::X()
    X(23);        // create an unnamed temporary via X::X(int)
}
你应该用

在类构造函数的定义中,成员初始值设定项列表指定直接和虚拟基子对象以及非静态数据成员的初始值设定项

e、 g

我需要有
X(){}
行,因为子构造函数需要调用父默认构造函数

对于成员初始化器列表,不再需要它(在此代码示例中)

对于构造函数体中的
X(23);
,您只是创建了一个临时的
X
,它与
Z
的基本子对象
X
无关;然后将对其使用
X
的默认构造函数(即
X::X()

Z(int n) : X() {  // initialize the base suboject X via X::X()
    X(23);        // create an unnamed temporary via X::X(int)
}

您不调用基类的构造函数

Z(int n){
    X(23);
}
这将创建一个未命名的临时X对象,并将23传递给其构造函数。它不会构造Z的X子对象

在C++中,我们使用成员初始化列表语法构造基础和成员:

X(int b) :
  c(11)
{}

Z(int n) :
  X(23)
{}

成员初始值设定项列表语法与构造成员为简单整数时所做的赋值几乎相同。但请注意,更复杂的子对象将首先默认构造,然后调用其赋值运算符。这可能会造成严重的(恶化)性能上的差异在于只在成员初始值设定项列表中指定它们并构造一次。

您不调用基类的构造函数

Z(int n){
    X(23);
}
这将创建一个未命名的临时X对象,并将23传递给其构造函数。它不会构造Z的X子对象

在C++中,我们使用成员初始化列表语法构造基础和成员:

X(int b) :
  c(11)
{}

Z(int n) :
  X(23)
{}

成员初始值设定项列表语法与构造成员为简单整数时所做的赋值几乎相同。但请注意,更复杂的子对象将首先默认构造,然后调用其赋值运算符。这可能会造成严重的(恶化)性能差异只在成员初始化列表中指定,构造一次.< /p> <代码> x(23);< /COD>意味着创建一个临时的X,然后立即销毁。它与<代码>的X部分无关。 >如果从java背景中来到C++,最好忘记所有的。<代码> x(23)
意思是创建一个临时的X,然后立即销毁。它与<代码>的X部分无关。 >如果你从java背景中来到C++,你最好把它全部忘记。