virtual关键字的使用

1.虚函数

Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对pointprint函数的调用实际上是调用了Derivedprint函数而不是Baseprint函数。这是面向对象中的多态性的体现

基类的函数调用如果有virtual则根据多态性调用派生类的,如果没有virtual则是正常的静态函数调用,还是调用基类的。

class Base

{

public:Base(){}

public:

       virtual void print(){cout<<"Base";}

};

 

class Derived:public Base

{

public:Derived(){}

public:

       void print(){cout<<"Derived";}

};

 

int main()

{

       Base *point=new Derived();

       point->print();

}

OutputDerived

2.纯虚函数:

C++语言为我们提供了一种语法结构,通过它可以指明,一个虚拟函数只是提供了一个可被子类型改写的接口。但是,它本身并不能通过虚拟机制被调用。这就是纯虚拟函数(purevirtual function)。 纯虚拟函数的声明如下所示:

class Query {

public:

// 声明纯虚拟函数

virtual ostream& print( ostream&=cout ) const = 0;

// ...

};

这里函数声明后面紧跟赋值0

包含一个或多个纯虚拟函数的类被编译器识别为抽象基类。抽象基类不能被实例化,一般用于继承。

3.虚拟继承(virtual public

在多继承下,虚继承就是为了解决菱形继承中,B,C都继承了AD继承了B,C,那么D关于A的引用只有一次,而不是 普通继承的 对于A引用了两次……

格式:可以采用publicprotectedprivate三种不同的继承关键字进行修饰,只要确保包含virtual就可以了。

class A

{

  void f1(){};

};

class B : public virtual  A{

  

 void f2(){};

};

虚继承:在继承定义中包含了virtual关键字的继承关系;

虚基类:在虚继承体系中的通过virtual继承而来的基类,

了解下概念,至于虚基类的初始化、以及虚继承体系的进一步继承问题暂不讨论。

C++标准中(也是很自然的)选择在每一次继承子类中都必须书写初始化语句(因为每一次继承子类可能都会用来定义对象),而在最下层继承子类中实际执行初始化过程。所以上面在每一个继承类中都要书写初始化语句,但是在创建对象时,而仅  仅会在创建对象用的类构造函数中实际的执行初始化语句,其他的初始化语句都会被压制不调用。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值