gpt4 book ai didi

c++ - 重写不共享通用接口(interface)的基类的虚函数

转载 作者:IT老高 更新时间:2023-10-28 23:19:55 25 4
gpt4 key购买 nike

#include <iostream>
struct B1
{
virtual void method()=0;
virtual ~B1(){}
};

struct B2
{
virtual void method()=0;
virtual ~B2(){}
};

struct D: B1, B2
{
virtual void method()
{
std::cout << "D::method\n";
};
};

int main(int argc,char *argv[])
{
D d;
B1 &b1=d;
B2 &b2=d;
b1.method();
b2.method();
return 0;
}

注意,B1 和 B2 不共享公共(public)接口(interface)。

这样合法吗?如果是 - 在哪个标准中? C++98/03/11 ?

msvc 和 gcc 都编译好了。

以前我认为,我必须为这种情况使用一些通用接口(interface)(可能的虚拟继承)。

这种情况有什么特别的名字吗?

请详细说明它是如何工作的?也许是一些 ISO 引用资料?

最佳答案

您的代码格式正确:void D::method() 覆盖 void B1::method()void B2::method( ).

规范声明(C++11 §10.3/2):

If a virtual member function vf is declared in a class Base and in a class Derived, derived directly or indirectly from Base, a member function vf with the same name, parameter-type-list, cv-qualification, and ref-qualifier (or absence of same) as Base::vf is declared, then Derived::vf is also virtual (whether or not it is so declared) and it overrides Base::vf.

B1 声明了一个虚成员函数 void B1::method()D 类是从 B1 派生的,它还声明了一个同名的成员函数(method),同一个参数列表(无参数) , 相同的 cv-qualification(无限定)和相同的 ref-qualifier(无限定)。

因此,void D::method() 会覆盖 void B1::method()

同样的逻辑适用于 void B2::method() (只需将上述解释中的 B2 替换为 B1 即可),所以 void D::method() 覆盖 void B1::method()void B2::method()

关于c++ - 重写不共享通用接口(interface)的基类的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11459473/

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