gpt4 book ai didi

c++ - 'non-virtual interface' 和 'abstract interface' 有什么区别?

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

我正在用 C++ 实现设计模式,我希望我的类通过组合来利用接口(interface),这让我研究了实现接口(interface)的不同方法。我想澄清一下这个术语的定义。

最佳答案

非虚拟接口(interface)是一个公共(public)成员函数,它不是虚拟的,但通常希望根据可覆盖的虚拟函数来实现:

class Interface
{
public:
int compute()
{
return compute_impl();
}
private:
virtual int compute_impl() = 0;
protected:
virtual ~Interface() { }
};

这里巧妙的是实现实际上是私有(private)的,因为您仍然可以覆盖私有(private)方法 - 您只是不能从外部调用它们。 p>

相比之下,抽象接口(interface)本身是虚拟的,并且在接口(interface)类中纯粹如此:

class Interface
{
public:
virtual int compute() = 0;
protected:
virtual ~Interface() { }
};

虽然这两种方法表面上看起来很相似,但非虚拟接口(interface)习惯用法的优点是接口(interface) 不受虚拟成员函数的实现 细节的阻碍。换句话说,接口(interface)的不同实现通过覆盖虚函数来满足其契约这一事实是实现的一个细节,它不是接口(interface)的公共(public)方面的一部分。特别是,作者将来可以自由更改功能的实现方式,而不必担心用户开发了自己的继承和覆盖层次结构。

关于c++ - 'non-virtual interface' 和 'abstract interface' 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18542805/

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