C++中函数重写 重载与重写的区别

重载:   (静态多态)

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;
}