浅谈C++ 虚函数列表

概要

C++的封装,继承,多态 是它三个重要的内容。 而其中多态的实现,就涉及到了虚函数。 有虚函数的出现就可以称之为多态,就有关键字virtual 修饰的函数。 如virtual void function();
而如果 virtual void function() = 0; 这种就称之为纯虚函数。 有纯虚函数的类,又叫做抽象类。
纯虚函数与普通虚函数写法上的最明显的是后面是否有“=0”, 而它的的特点是纯虚函数是不能在本类内写它的实现, 也就是子类继承时,必须写父类接口的实现。
而普通虚函数就是子类可以重写父类的虚函数。而且父类的指针可以指向子类对象。
而虚函数表是编译器为有virtual 修辞的函数新建的一张表, 开辟了一块对应的内存空间。


下面讲的主要是虚函数表的一些简单的实例:

单继承,无重写

class A {
virtual void a();
virtual void b();
};

class B : public A {
virtual void a1();
virtual void b1();
}

B *b;
//这种形势的,不涉及到重写,它的表现形势为
a b a1 b1
即为依次出现

单继承,有重写

class A {
virtual void a();
virtual void b();
};

class B : public A {
virtual void a();
virtual void b1();
};

B* b;
//它的表为
B::a() A::b B::b1
就是子类的重写函数在最前。

多继承,无重写

class A {
virtual void a();
virtual void b();
};

class B {
virtual void a1();
virtual void b1();
};

class C : public A, public B
{
virtual void a2();
virtual void b2();
};

C *c ;
A::a() , A::b(), C::a2() , C:: b2 第一张表;
B::a1(), B::b1() 第二张表
C::a2, C::b2 第三张表

多继承,有重写

class A {
virtual void a();
virtual void b();
};

class B {
virtual void a();
virtual void b1();
};

class C : public A, public B
{
virtual void a();
virtual void b2();
};

C *c ;
C::a() , A::b(), C::a2() , C:: b2 第一张表;
C::a(), B::b1() 第二张表
C::a, C::b2 第三张表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小K小Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值