gpt4 book ai didi

c++ - 如何在 C++ 中编程为接口(interface)/抽象类?

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

请考虑像这样的纯虚拟类:

class Foo {
public: virtual int FooBar() = 0;
};

Java 开发人员会称这样的东西为“接口(interface)”。通常,您然后编程到该接口(interface),例如(不好的例子,抱歉):

class Bar {
public: Foo f;
};

class Child : public Foo {
public: int FooBar() { return 1; }
};

Bar b;
b.foo = Child();

这在 C++ 中显然行不通,因为类 Foo 的实例是在构造时创建的(但这是不可能的,因为 Foo 是一个抽象类)。

在 C++ 中是否有任何“编程到接口(interface)”的模式?

编辑:澄清了示例,抱歉。

最佳答案

如果您需要指向或引用接口(interface)(或抽象类)实现的东西,您可以使用指向该接口(interface)的指针:

class Bar {
public:
Bar( Foo& af ) : f( af )
{}
private:
Foo& f;
};

如果要使用引用 Foo& f、指针 Foo* f 或指向 const 实现的引用或指针(const Foo& f const Foo* f 的 code> 或什至是指向 const 实现的 const 指针 (const Foo* const f) 取决于您的要求。

如果可能,在引用实现从外部传递的组合中使用引用(如我的示例)。如果对象更像是一个聚合并且由包含对象本身构造,则使用指针或智能指针。

更新:到目前为止还没有人提到过,如果你要动态分配实现接口(interface)的对象,基类必须有一个虚拟析构函数,否则你将调用未定义的行为,即使你使用智能指针。请注意,智能指针可以派上用场,但它们并不是万灵药。您仍然应该牢记一些所有者层次结构,否则您最终会遇到无法通过智能指针轻松解决的循环。

关于c++ - 如何在 C++ 中编程为接口(interface)/抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11950231/

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