gpt4 book ai didi

C++:覆盖纯虚拟成员变量?

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

这个问题最好用代码来描述。我有一个名为 Vertex 的类,它包含一个名为 Params 的类的实例:

class Params {
virtual Params operator + (Params const& p) = 0;
};

class Vertex {
public:
Params operator + (Params const& ap) const {
return p + ap
};

virtual float eval() = 0;

private:
Params const p;
};

我还有一个名为 EllParams 的类,它派生自 ParamsEllVertex 派生自 Vertex .我想知道的是如何处理EllVertex中的Vertex中的私有(private)成员变量p:我希望它是类型>EllParams。有什么方法可以使 p 虚拟化/覆盖它吗?还是我应该寻找解决方案的模板?

最佳答案

嗯...你需要初始化 ParamsVertex不知何故。所以让它成为 Vertex 的参数构造函数。那么你的EllVertex将通过 EllParams从其构造函数到父构造函数,这将是私有(private) Vertex.p 的方式已初始化。

例如:

class Params {
virtual Params operator + (Params const& p) = 0;
};

class Vertex {
public:
Params operator + (Params const& ap) const {
return *p + ap
};

virtual float eval() = 0;

protected:
Vertex(Params* inputParams) : p(inputParams) {}

private:
Params* const p;
};

请注意,我已经更改了您的 p指向指针的成员变量。这样,您就不必确保为 Params 定义了正确的复制构造函数。或任何子类。

关于C++:覆盖纯虚拟成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3514888/

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