Vin*_*gar 2 c++ polymorphism virtual inheritance static
请参阅此函数 function 的输出。它表明静态函数可以被覆盖,因为派生类继承了函数:
void put(){printf("Static functions in base class");}
Run Code Online (Sandbox Code Playgroud)
如果我们不覆盖put()输出是基类中的静态函数,但我们将其覆盖为:
void put(){printf("Static functions are overridden in derived class");}
Run Code Online (Sandbox Code Playgroud)
所以输出是静态函数在派生类 public 中被覆盖:
#include<iostream>
class base{
public:
static void put(){printf("Static functions in base class");}
};
class derived : public base{
void put(){printf("Static functions are overridden in derived
class");}
};
int main(){
derived *bp = new derived;// Static Polymorphism //
bp->put();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
由于这里put()不是虚函数。所以我们可以覆盖不是虚拟的函数吗?
这是静态多态的情况吗?
静态函数可以被覆盖吗?
不。
struct Base { static void f() {} };
struct Derived : Base { void f() {} };
Run Code Online (Sandbox Code Playgroud)
Base::f和Derived::f是两个不同的函数,它们甚至不共享一个公共接口:正确的不接受任何参数,后者是指向 a 的隐藏指针Derived。
可以覆盖非虚函数吗?
不。
struct Base { void f() {} };
struct Derived : Base { void f() {} };
Run Code Online (Sandbox Code Playgroud)
Derived::fBase::f当您操作对象、对象引用或指向类型对象的指针时隐藏Derived:
Derived d;
Derived& dref = d;
Derived* dptr = &d;
d.f(); // calls Derived::f
dref.f(); // calls Derived::f
dptr->f(); // calls Derived::f
Base& bref = d;
Base* bptr = &d;
bref.f(); // calls Base::f
bptr ->f(); // calls Base::f
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2323 次 |
| 最近记录: |