1 #include <iostream> 2 3 using namespace std; 4 5 class Base { 6 public: 7 virtual void VirtualFunc() { cout << "Base virtual" << endl; } 8 void NonVirtualFunc() { cout << "Base non-virtual" << endl; } 9 }; 10 11 class Derived : public Base { 12 public: 13 void VirtualFunc() { cout << "Derived virtual" << endl; } 14 void NonVirtualFunc() { cout << "Derived non-virtual" << endl; } 15 }; 16 17 int main(int argc, char *argv[]) 18 { 19 Base base; 20 Derived derived; 21 Base *dPtr = &derived; 22 Base *bPtr = &base; 23 Derived *ptr = static_cast<Derived *>(&base); 24 ptr->VirtualFunc(); 25 ptr->NonVirtualFunc(); 26 27 28 dPtr->VirtualFunc(); 29 dPtr->NonVirtualFunc(); 30 bPtr->VirtualFunc(); 31 bPtr->NonVirtualFunc(); 32 return 0; 33 }
输出:
Base virtual
Derived non-virtual
Derived virtual
Base non-virtual
Base virtual
Base non-virtual
总结一句话:虚函数是谁的就是谁的,非虚函数转换成谁的就是谁的。