覆盖:在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。
重载:有两个或多个函数名相同的函数,但是函数的形参列表不同。在调用相同函数名的函数时,根据形参列表确定到底该调用哪一个函数。
多态:在基类中定义了一个虚拟函数,然后在派生类中又定义一个同名,同参数表的函数,这就是多态。多态是这3种情况中唯一采用动态绑定技术的一种情况。也就是说,通过一个基类指针来操作对象,如果对象是基类对象,就会调用基类中的那个函数,如果对象实际是派生类对象,就会调用派生类中的那个函数,调用哪个函数并不由函数的参数表决定,而是由函数的实际类型决定。
#include <iostream>
using namespace std;
class A
{
public:
void display1(){cout << "A:display1" << endl;} //display1重名叫覆盖
void display2(int a, int b){cout << "A:display2" << endl;}
//父子类不支持重载的,因为如果在外面初始化的话,需要加上作用域的A::display2(), B::display2()的
virtual void display3(){cout << "A:display3" << endl;} //多态
};
class B:public A
{
public:
void display1(){cout << "B:display1" << endl;}
void display2(float a){cout << "B:display2" << endl;} //display2重名叫重载
void display2(int a, int b){cout << "B:display2(int int)" << endl;}
void display3(){cout << "B:display3" << endl;}
};
int main(int argc, char const *argv[])
{
B b;
b.display2(1,2);
b.display2(0.123);
//多态
A *a =new B;
a->display3();
return 0;
}