一、子类和父类函数名相同,base::fun()函数有virtual关键字,则由实际绑定的类型决定调用哪一个函数。ios
#include<iostream> using namespace std; class base { public: virtual void fun() { cout << "base的fun()被调用"<< endl; } }; class subClass :public base { public: void fun() { cout << "subclass的fun()被调用"<<endl; } }; void main() { subClass sc; base &b = sc; b.fun(); }由于b实际绑定的对象是子类,因此调用子类的函数,输出"subclass的fun()被调用"
#include<iostream> using namespace std; class base { public: /* virtual */void fun() { cout << "base的fun()被调用"<< endl; } }; class subClass :public base { public: void fun() { cout << "subclass的fun()被调用"<<endl; } }; void main() { subClass sc; base &b = sc; b.fun(); }
尽管b绑定的是子类的对象,但base::fun()函数没有virtual关键字,而b是父类对象,因此会调用父类base::fun(),输出函数
"base的fun()被调用"spa