[英]function called by constructors of derived classes not supposed to be pure virtual in base class
[英]Two base classes with the same pure virtual function
我有一个继承自B类的A类。所以A类的接口包含一些B类的纯虚函数和A类的一些函数。现在我需要为A类进行单元测试,所以想要一些接口我可以嘲笑的A级。 所以现在我想知道给定的代码在C ++ 14中是否正确并且它是否可以导致UB:
class Base1 {
public:
virtual void func() = 0;
};
class Base2 {
public:
virtual void func() = 0;
};
class Derived : public Base1, public Base2 {
public:
void func() override { }
};
int main() {
Derived d;
d.func();
return 0;
}
是的,这段代码格式正确, void func()
会覆盖A::func()
和B::func()
。 从C ++ 14标准:
[class.virtual]
- 如果虚拟成员函数
vf
在class Base
和class Derived
class Base
声明,直接或间接从Base
class Derived
,则具有相同名称的成员函数vf
,parameter-type-list(8.3.5),cv-qualification和声明了Base::vf
ref-qualifier(或不存在相同的),然后Derived::vf
也是虚拟的(无论是否如此声明)并且它覆盖Base::vf
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.