函数重写(覆盖)
定义: 子类重新定义父类中有相同名称,返回值和参数的虚函数,主要在继承关系中出现。
基本条件:
- 重写的函数和被重写的函数必须都为virtual函数,并分别位于基类和派生类中
- 重写的函数和被重写的函数,返回值,函数名和函数参数必须完全一致
#include<iostream>
using namespace std;
class father
{
public:
virtual void fun()
{
cout << "father" << endl;
}
};
class child :public father
{
public:
virtual void fun()
{
cout << "child" << endl;
}
};
函数隐藏
定义: 在父类与子类中,函数名相同,参数不同,无论父类中的同名函数是否含有virtual关键字,都是隐藏。
隐藏与重写的区别: 在父类和子类中,函数名相同,参数相同,父类中的同名函数没有virtual关键字,为隐藏。
在子类中只要和父类函数名字相同不是重写,一定是函数隐藏。、
#include<iostream>
using namespace std;
class Base
{
public:
void funA()
{
cout << "funA()" << endl;
}
virtual void funB()
{
cout << "funB()" << endl;
}
};
class Heri :public Base
{
public:
void funA() //函数隐藏因为父类中的同名函数不是虚函数
{
cout << "funA():heri" << endl;
}
void funA(int a) //函数隐藏因为参数不同
{
cout << "funA(int a):heri" << a << endl;
}
void funB() //函数重写
{
cout << "funB():heri" << endl;
}
};