`
Michaelmatrix
  • 浏览: 208585 次
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C++中的virtual函数在继承的类中需要实现

 
阅读更多

注意:C++中的virtual函数在继承的类中需要实现,如有些虚构函数是virtual,需要实现,不能~aa();这样只声明不实现。否则一般会出错:undefined reference to vtable for。

参考:链接器linker需要将虚函数表vtable 放入某个object file,但是linker无法找到正确的object文件。这个错误常见于刚刚创建一系列有继承关系的class的时候,这个时候很容易忘了给base class的virtual function加上函数实现。

解决办法:给基类的virtual函数加上本来就应该有的function body。

分享到:
评论

相关推荐

    C++语言中类、继承、多态等的用法?

    通过C++语言中的继承机制,一个新类既可以共享另一个类的操作和数据,也可以在新类中定义已有类中没有的成员。 class CBase { public: void FuncA(void); void FuncB(void); }; //派生类 class CDerive :...

    深入理解c++中virtual关键字

    1.virtual关键字主要是什么作用?c++中的函数调用默认不适用动态绑定。要触发动态绑定,必须满足两个条件:第一,指定...3.virtual函数的效果 代码如下:class GrandFather{public: GrandFather() {} virtual void fu

    C++ 虚函数表解析

    一篇关于C++ 虚函数表解析详解的文章,大家一块学习。 博主还有好多值得阅读的文章,网址http://blog.csdn.net/haoel

    解析C++编程中virtual声明的虚函数以及单个继承

    虚函数是应在派生类中重新定义的成员函数。 当使用指针或对基类的引用来引用派生的类对象时,可以为该对象调用虚函数并执行该函数的派生类版本。 虚函数确保为该对象调用正确的函数,这与用于进行函数调用的表达式...

    (转)多重继承下的虚函数表

    多态是C++语言中的一项重要的...在C++的标准中提到,编译器必需要保证虚函数表的指针存在于对象实例中最前面的位置。 这意味着我们通过对象实例的地址得到它的VFTable,然后就可以遍历其中函数指针,并调用相应的函数。

    深入剖析C++虚函数表

    对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应...

    浅析C++中的虚函数

    一、定义定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数。 语法:virtual 函数返回类型函数名(参数表) { 函数体 } 用途:实现多态性,通过指向派生类的基类指针,访问派生类中同名...

    C++中虚函数与纯虚函数的用法

    通过数据抽象,可以使类的接口与实现分离,使用继承,可以更容易地定义与其他类相似但不完全相同的新类,使用动态绑定,可以在一定程度上忽略相似类的区别,而以统一的方式使用它们的对象。 虚函数的作用是实现多态...

    虚函数表工作原理

    对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应...

    解析C++中的虚拟函数及其静态类型和动态类型

    虚拟函数是C++语言引入的一个很重要的特性,它...各派生类在声明为基类的派生类时,默认继承了这些非虚拟成员函数的声明/实现,如同默认继承基类的数据成员一样,而不必另外做任何声明,这就是继承带来的代码重用的优点

    C++ 虚函数专题

    这样有虚函数的实例,将会储存在这个实例的内存中。即用父类的指针,操作子类的时候,通过虚函数表来实现找寻到父类。 定义下方的一个类 class Base{ public: virtual void f(){ cout << "Base::f" <&...

    关于C++中菱形继承和虚继承的问题总结

    在多重继承中建议使用“接口”,来避免多重继承中可能出现的各种问题。本文将给大家详细介绍关于C++菱形继承和虚继承的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧。 继承:  1. 单继承...

    C++中虚函数和纯虚函数定义

     一个成员函数被声明为虚函数后,在同一类族中的类不能再定义一个非virtual的但与该虚函数具有相同的参数(包括个数和类型)和函数返回值类型的同名函数。  根据什么考虑是否把一个成员函数声明为虚函数?  ①...

    C++ Primer第四版【中文高清扫描版】.pdf

    7.7.2 在类外定义成员函数 225 7.7.3 编写Sales_item类的构造 函数 225 7.7.4 类代码文件的组织 227 7.8 重载函数 228 7.8.1 重载与作用域 230 7.8.2 函数匹配与实参转换 231 7.8.3 重载确定的三个步骤 232 7.8.4 ...

    C++类的虚函数虚继承所占的空间

     GCC中, 无论是虚函数还是虚继承, 都需要将指针存储在虚函数表(virtual function table), 占用4个字节.  继承会继承基类的数据, 和虚函数表, 即继承基类的空间.  代码: /* * test.cpp * * Created ...

    c++ 虚函数与纯虚函数的区别(深入分析)

    在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念。因为它充分体现 了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广。比如在微软的MFC类库中,你会发现很多函数都有virtual...

    C++类继承示例

    C++的子类与孙子类都实现了虚函数时,孙子类的实现会覆盖掉子类的实现。  继承的主要的应用是把不同的类放到一个数组中,然后遍历调用同名函数。  实例如下: #include #include #include using ...

    探讨C++中不能声明为虚函数的有哪些函数

    多态的运行期行为体现在虚函数上,虚函数通过继承方式来体现出多态作用,顶层 函数不属于成员函数,是不能被继承的 2.为什么C++不支持构造函数为虚函数? 这个原因很简单,主要是从语义上考虑,所以不支持。因为...

    关于C++中虚拟继承的一些总结分析

    如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:class Aclass B1:public ...

Global site tag (gtag.js) - Google Analytics