虚函数

多态:允许将子类类型的指针赋值给父类类型的指针。赋值以后,父类对象可以根据当前赋值给它的子类对象的特性以不同的方式运作。

实现多态就需要使用虚函数。

虚函数的本质:通过基类访问派生类定义的函数

虚函数的作用:在程序运行的阶段动态地选择合适的成员函数

class A{

public: virtual void print(){

    printf("A");

}

}

class B:public A{

public: void print(){

    printf("B");

}

A a;

B b;

A* p1=&a;

A* p2=&b;//注意这里的指针是用基类类型

p1->print();//输出A

p2->print();//输出B

语法:

1)派生类的虚函数要与基类的虚函数具有同样的形参个数和形参类型

2)虚函数的关键字virtual只要在声明时使用,不需要在定义时使用

3)基类某一函数声明为虚函数之后,派生类的同名函数自动成为虚函数

4)基类的析构函数应该定义为虚函数

 不能声明虚函数的情况:

1)非类的成员函数;2)静态成员函数(不需要实例就可以调用);3)内联函数;4)构造函数(构造函数是在对象完全构造之前运行,构造函数初始化虚表指针,虚函数放在虚表里面)

纯虚函数:virtual int f()=0

                   基类中是没有实现的,派生类必须重新声明和定义(实现)(不需要加关键字和“=0”)。

                  含有纯虚函数的类为抽象类,抽象类不能生成对象。

阻止类被实例化:1)抽象类;2)构造函数声明为private;

你可能感兴趣的:(虚函数)