2020-08-16

c++关于虚函数的知识

1、构造和析构函数

    构造函数不能为虚函数。每个对象的虚函数表指针是在构造函数中初始化的,因为构造函数没执行完,所以虚函数表指针还没初始化好,构造函数的虚函数不起作用,所以构造函数不能是虚函数。

    析构函数可以为虚函数。当基类的指针指向派生类时,删除基类指针,会调用子类析构函数,再去调用基类的析构函数,防止内存泄漏。

2、虚函数和纯虚函数

        虚函数 virtual int A() ;

        纯虚函数 virtual int A() = 0;

    虚函数是为了重载和多态的需要,在基类中有定义,在子类中可以重写也可以不重写。纯虚函数在基类中无定义,必须在子类中加以实现。在基类中将函数定义为虚函数,其作用就是在子类中可以被重写,从而达到动态多态。

3、抽象类和纯虚类

    包含至少一个纯虚函数的类视为抽象类,抽象类智能作为基类来派生子类,不能声明抽象类的对象。例如定义了一个形状的基类,将计算面积的函数定义为纯虚函数,当派生了不同的形状子类后,在各自的子类中将计算面积的函数进行实现。

class shape

{

protected:

double x;

double y;

public:

virtual void area()=0;

};

class triangle: public shape

{

void area()

{

cout<<x*y*0.5<<endl;

}

};

当子类B虚继承自基类A,那么类A就成为类B的虚基类。虚基类的作用是解决多继承的时候,子类中出现的二义性问题。

当类B和类C虚继承于A,而类D多继承于类B和类C,这时类D去访问类A中的对象时,就不会出现二义性的问题。

class A

{

...

};

class B: virtual pubilc A

{

...

};

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值