Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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++ - Fatal编程技术网

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?