C++ virtual关键字理解

原创 2018年04月14日 23:41:53

virtual 用于在类中定义一个成员函数,这个函数叫做虚函数,且不能是静态的。定义如下

class 类名{

    ...

    virtual 返回类型 函数名(形式参数列表)

    ...

}

当在派生类中定义了一个同名的成员函数是,只要该成员函数的参数个数和类型以及返回类型与基类中的同名的虚函数完全一样,则派生出来的这个成员函数无论是否使用virtual,他都将成为一个虚函数。程序员习惯给派生的同名函数也加上virtual,以便于阅读理解。


以下参考了网上其他博客:

在c++语言中,从代码到程序的运行,要经历编译和连接,针对这两个不同的阶段,c++设计了不同的机制,其中virtual和inline就是区分编译器工作和链接器工作的标志;

 inline很容易理解,生命为inline的函数在编译阶段即被展开成代码,而非inline的函数采用运行时链接的方式处理;

 virtual关键字,我只在这里谈三个地方的用途:

 1、virtual基类

   在多重继承中,从派生类到基类存在多条路线时(多个继承脉络或者途径),一个这种派生类的对象实例化将包含多个基类对象,浪费资源且调用混乱的现象出现。因此引入了virtual baseclass,来在运行阶段克服多个基类对象的产生。这个vitual是在运行阶段保证对象唯一性的。

2.virtual函数

 虚函数的出现,是由于基类的指针可以执行派生类,因此引出了不便,如

class deriv:public class base

{

  public:

    void show();

}

deriv d;

base* b;

b=&d;

b->show();

这里的show应该调用谁的呢?我们的意思肯定是调用d的,但是编译器处理的话b和base类是绑定在一起的,他实际上是会调用b的show函数。

因此,我们引入virtual函数,来告诉编译器,出现这种情况时,在运行时动态链接进行处理。

3.virtual在纯虚函数中使用

 纯虚函数完全是为了继承体系的完整,也是集成virtual函数的作用而产生的。代表了编译器阶段对象的绑定,将调用选择转移到运行时动态绑定。

综上:virtual关键的引入,可以理解为阻止编译阶段的静态绑定,将绑定(虚函数)和约束工作(虚基类)转移到运行时动态处理。

C++中virtual关键字的用法

关于virtual关键字的用法总结如下,有错误或者总结不到位的情况请能帮本人指出,非常感谢! Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Vir...
  • zgaoq
  • zgaoq
  • 2017-02-10 10:54:20
  • 5586

virtual是c++中的关键字

virtual是c++中的关键字,用它来定义虚函数。用法:在基类中被定义为virtual的函数,派生类重载该函数不需要再次显示说明该函数是virtual的。例如以下代码: class A{ //虚函数...
  • shandaliuyan
  • shandaliuyan
  • 2010-10-08 13:49:00
  • 5058

C++、C#中 abstract 与 virtual关键字的区别联系

C++:   C++中,由virtual实现多态。除多态外,virtual有两个特殊用法: 1、虚基类(Virtual base class)       为解决多重继承时的二义性提出来的。使...
  • iefswang
  • iefswang
  • 2012-04-30 21:01:33
  • 10013

C++学习一virtual关键字的使用

//可能有错误希望大家帮忙指出,谢谢 virtual关键字,可以使用在特定的成员函数和基类。 使用在: virtual使用在析构函数之前能够实现虚析构函数。//也就是在被基类指针指向时,再使用d...
  • u011580175
  • u011580175
  • 2017-02-07 16:44:38
  • 117

C++ 构造函数和析构函数与virtual关键字

一、构造函数 1.构造函数任何时候都不可以声明为虚函数,原因如下:1)虚函数的调用军需通过虚函数表vtable来调用,虚函数表是存储在内存空间的,在调用构造函数前,对象还未被实力化,也就没有该对象的...
  • luoxue720
  • luoxue720
  • 2017-07-13 22:23:52
  • 267

virtual关键字的作用

1. 在派生类中重新定义基类的方法当需要在派生类中重新定义基类的方法时,应在基类方法前使用关键字virtual,而派生类重新定义的方法自动被继承为虚方法,不过可以加上virtual前缀进行限定,以便区...
  • iFuMI
  • iFuMI
  • 2016-04-07 11:23:19
  • 1468

虚函数中virtual关键字的使用问题

在C++中用到关键字virtual的一共有两个部分 一个是虚继承,一个是虚函数 今天主要讲解虚函数中用到virtual的一些简单部分。就当是加深记忆 1.在基类中声明虚函数一定要用关键字 vir...
  • zhanghuaichao
  • zhanghuaichao
  • 2016-10-11 13:34:49
  • 784

Virtual 关键字,派生类重写父类的方法

定义C++中虚函数的关键字 在使用virtual之前,C++对成员函数使用静态联编,而使用virtual,并且在调用函数时是通过指针或引用调用,C++则对成员函数进行动态编联(引用百科)。   ...
  • ganpengjin1
  • ganpengjin1
  • 2013-10-14 09:59:46
  • 3441

c++ virtual deconstructor

Yes: you can have virtual destructors, and the only reason is to override them in derived classes. ...
  • qq550764107
  • qq550764107
  • 2014-02-27 16:52:16
  • 496
收藏助手
不良信息举报
您举报文章:C++ virtual关键字理解
举报原因:
原因补充:

(最多只允许输入30个字)