gpt4 book ai didi

c++ - 如何使用 child 的成员初始化 parent ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:49:31 26 4
gpt4 key购买 nike

我有一个类需要初始化:

//Parent.h
class Parent {
public:
Parent(Image image);
private:
const Image parentImage;
}

//Parent.cpp
Parent::Parent(Image image) : parentImage(image) {}

//Child.h

#import "Parent.h"

class Child : public Parent {
public:
Child(int c);
private:
Camera childCamera;
}

//Child.cpp
Child::Child(int c) : Parent(this->childCamera.getImage()), childCamera(c) {}

Camera 需要先初始化,然后才能从中检索图像。 Parent 存储来自相机的图像,const,child 存储Camera。如何创建一个 Child?我无法更改 Parent,因为还有其他子类以其他方式初始化 Parent。我可以改变Child,但是Camera不能复制,而且Child确实需要存储Camera .

编辑:如果这是最干净的解决方案,我可以将构造函数添加到 Parent

最佳答案

你不能这样做。

根据标准 (12.6.2/10) 的初始化顺序是:

— (...)

— Then, direct base classes are initialized in declaration order as they appear in the base-specifier-list (regardless of the order of the mem-initializers).

— Then, non-static data members are initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers).

— Finally, the compound-statement of the constructor body is executed.

因此在您的 Child 构造函数内存初始化列表中,对于 Parent 初始化器,您不能使用任何依赖于 Child 成员变量 因为它们在那一刻被初始化了。

但是您可以使用 Child 构造函数的参数,例如:

Child::Child(int c) : Parent(c.getImage()), childCamera(c) {}

当然前提是 Camera 对象的每个拷贝都将返回与原始对象相同的图像。

另一种选择是使用来自辅助类的多重继承(使用上面标准引用的第二个破折号)。但这我更棘手,无论如何也需要相机对象的拷贝。

关于c++ - 如何使用 child 的成员初始化 parent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31642431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com