重载: (静态多态)
1、同一作用域
2、子类无法重载父类函数,父类同名函数将被隐藏
3、重载是在编译期间根据参数类型和个数决定的
重写: (动态多态)
1、在子类中定义与父类中原型相同的函数
2、函数重写只发生在父类与子类之间
3、使用virtual关键字申明后能产生多态
4、运行期间根据具体对象类型决定调用的函数
多态满足的三个条件:
1、要有继承 2、要有虚函数重写 3、要有父类指针指向子类对象
#include<iostream>
using namespace std;
class A
{
public:
virtual void print() //虚函数 virtual使得sizeof(A)变为4个字节,无virtual时只有一个占位字节。
{
cout << "AAAAAAAAA" << endl;
}
};
class B : public A
{
public:
void print()
{
cout << "BBBBBBBBB" << endl;
}
void show()
{
cout << "bbbbbbbbbb" << endl;
}
};
int main()
{
A *pa = new A;
cout << sizeof(A) << endl;
pa->print();
delete pa;
pa = new B;
pa->print();
//pa->show(); 会报错,pa的类型在编译时就已经定义为A类型,在A类型中不含有show函数。pa不能指向A中不含有的函数。
return 0;
}