重载:相同范围中的函数之间的函数签名不同(参数类型、个数及顺序),注意重载与函数之间的返回类型无关。
int func();
int func(char a);
int func(int a, char b);
int func(char a, int b);
void func(float a);
重写:也叫做覆盖,函数名相同,参数相同,返回类型相同,函数体不同;是C++多态特性的体现;基类中定义的虚函数,在其派生类中被重复定义。
class Base{
public:
virtual void func()
{
cout << "Base" << endl;
}
};
class Derive:public Base{
public:
void func()
{
cout << "Derive" << endl;
}
};
隐藏:基类中定义的函数,在其派生类中被重复定义,且基类函数未定义为虚函数,则发生隐藏。
class Base{
public:
void a(){}
};
class Derive:public Base{
public:
void a(){} //参数相同,且基类函数未定义为虚函数,则基类函数被隐藏
};
示例:
#include <iostream>
using namespace std;
class Base{
public:
virtual void a()
{
cout << "Base" << endl;
}
};
class Derive:public Base{
public:
void a()
{
cout << "Derive" << endl;
}
};
int main(){
Derive *d = (Derive *)new Base;、
//Base *d = (Base *)new Base; //输出:Base(参考父子类指针指向问题)
return 0;
}
输出:
Derive