Miz*_*zor 19 c++ polymorphism overriding function
我有三个不同的基类:
class BaseA
{
public:
virtual int foo() = 0;
};
class BaseB
{
public:
virtual int foo() { return 42; }
};
class BaseC
{
public:
int foo() { return 42; }
};
Run Code Online (Sandbox Code Playgroud)
然后我从这个基础派生出来(用A替代A,B或C):
class Child : public BaseX
{
public:
int foo() { return 42; }
};
Run Code Online (Sandbox Code Playgroud)
如何在三个不同的基类中重写该函数?我的以下三个假设是否正确?还有其他警告吗?
Tod*_*ner 16
要记住的重要规则是,一旦函数声明为虚拟,派生类中具有匹配签名的函数始终是虚拟的.因此,它被重写为A的Child和B的Child,它的行为相同(除了你不能直接实例化BaseA).
但是,使用C,函数不会被覆盖,而是会被重载.在那种情况下,只有静态类型很重要:它会调用它的指针(静态类型)而不是对象的真实类型(动态类型)
Jar*_*aus 14
在派生类中,如果在基类中定义了虚拟方法,则该方法是虚拟的,即使在派生类的方法中未使用关键字virtual也是如此.
BaseA
它,它将按照预期进行编译和执行,具有foo()
虚拟和在类中执行Child
.BaseB
,它也将按照预期进行编译和执行,其中包含foo()
virtual()并在类中执行Child
.BaseC
但是,它将编译并执行,但它会执行BaseC
,如果你从上下文中调用它的版本BaseC
,以及Child
版本,如果你用的情况下调用Child
. 归档时间: |
|
查看次数: |
39728 次 |
最近记录: |