gpt4 book ai didi

c++ - 是否可以在运行时确定对象选择的情况下使用 C++ 对象组合?

转载 作者:行者123 更新时间:2023-11-30 01:44:53 29 4
gpt4 key购买 nike

假设我有一张类(class)脸。我希望使用组合来构建面部。 Face 有眼睛,所以我可以创建一个 Eyes 类并使用 composition 将眼睛添加到 Face。

但是如果我对眼睛进行子类化,例如

class Eyes { ... };
class BlueEyes : public Eyes { ... };
class BrownEyes : public Eyes { ... };

? (假设接口(interface)都是相同的。)

是否可以在运行时组合人脸,比如根据提供给构造函数的某些参数,人脸会得到 BlueEyes 或 BrownEyes?

最佳答案

您可以通过组合一个指向基类的指针来做到这一点。例如,

enum EyeColor{Blue, Brown}; // Even better would be enum class

class Face
{
private:
// Here is the composition - to a base-class ptr.
std::unique_ptr<Eyes> m_eyes;

public:
explicit Face(EyeColor c)
{
// Use c to instantiate m_eyes below to the appropriate-class object.
}
};

事实上,一些设计模式的 C++ 实现,例如 Strategy , 经常使用这个。

关于c++ - 是否可以在运行时确定对象选择的情况下使用 C++ 对象组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35380696/

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