c++子类和父类成员函数重名

一、子类和父类函数名相同,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()被调用"

二、子类和父类函数名相同,但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()被调用"spa