C++ 在下面的代码中,如何在不使用伪值的情况下初始化类成员?
//示例程序C++ 在下面的代码中,如何在不使用伪值的情况下初始化类成员?,c++,C++,//示例程序 #include <iostream> #include <vector> #include <array> class A{ public: A(int tempY){ y = tempY; } int y = 0; }; class B{ public: B(A tempZ){ z = tempZ.y;
#include <iostream>
#include <vector>
#include <array>
class A{
public:
A(int tempY){
y = tempY;
}
int y = 0;
};
class B{
public:
B(A tempZ){
z = tempZ.y;
}
A z;
};
int main()
{
int x = 1;
A objA(x);
B objB(objA);
std::cout << "y = " << objB.z << "!\n";
}
#包括
#包括
#包括
类B中有一个错误,因为我没有将构造函数参数传递给成员z。
我不想用一个伪值初始化它,有没有办法只使用构造函数参数来构建成员z,我如何告诉z使用B的构造函数参数
<>如果我缺少C++的一个基本方面,请让我知道我刚刚开始。 你可以使用类似这样的初始化列表< /p>
class B{
public:
B(A tempZ) : z(tempZ) {
}
A z;
};
这样,z将使用复制构造函数创建的新实例初始化。这不是RAII。如果没有默认构造函数,则需要在初始化器列表中初始化z
。这就是它的样子:B(A tempZ):z(tempZ){}
。您还应该对参数进行常量左值引用。@0x499602D2:non-RAII是什么?@LightnessRacesinOrbit,因为他在B
期间没有管理分配的资源的生命周期。@0x499602D2:Az
是分配的资源。@LightnessRacesinOrbit这意味着这就是RAII?