c++ - 如何维护类成员的顺序并仍然有一个有效的构造函数

标签 c++ constructor

我想要整洁的头文件,首先列出公共(public)成员,然后是私有(private)成员。

class A
{
public:
    A() : y(0), z(0), x(y + z)
    {}

    int x;

private:
    int y;
    int z;
};

成员按照它们被声明的顺序初始化,所以这个构造函数是错误的,因为当 x 使用它们时 y 和 z 没有被初始化。

这只是我可以写 x(0) 的示例,但如果这些不是整数而是更大的类型,那么它会很麻烦。 为了解决这个问题,我需要首先列出私有(private)成员 y 和 z, 然后是公共(public)成员 x。 有什么办法可以让我的私有(private)成员留在底部,同时在初始化列表中首先初始化它们?

如果没有,请指导我如何订购成员(member),因为我在网上找不到任何这样的例子。首先列出一些公共(public)成员,然后列出一些私有(private)成员,然后列出更多公共(public)成员,这对我来说似乎很脏,但也许我错了。

最佳答案

使用委托(delegate)构造函数你可以这样写:

class A
{
public:
    A() : A(0, 0) { }
    {}

    int x;

private:
    explicit A(int y_, int z_) : x(y_ + z_), y(y_), z(z_) { }
    int y;
    int z;
};

关于c++ - 如何维护类成员的顺序并仍然有一个有效的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633245/

相关文章:

c# - 构造函数中的虚拟成员调用

java - 当我使用 findViewById 时,将 R.id.[value] 中的 int 作为类构造函数参数传递给 NPE

c++ - 如何将 const 指针初始化为未知大小的 const 数据(需要分配)

c++ - 从相机中提取的异步数据会产生随机崩溃

c++ - 如何解决全局访问的问题?

C++ Boost 库几何.hpp

java - 如何存储由构造函数创建的类的实例,以便稍后可以调用 in 中的变量?

c++ - 在构造函数中分配数组时出错

c++ - 合法的dynamic_cast

c++ - 在同一 unix 套接字连接中两次读取元素时出错