1、子类和父类函数名相同,base::fun()函数有virtual关键字,则由实际绑定的类型决定调用哪个函数。
#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()被调用"
2、子类和父类函数名相同,但base::fun()函数没有virtual关键字,则由对象的类型决定调用哪个函数。
#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()被调用"