作者:陈皓
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。
虚函数...
分类:
编程语言 时间:
2016-06-26 12:54:28
阅读次数:
212
大家对虚表并不陌生,都知道每个含有虚函数的类对象都有1个虚指针,但是在现实使用中,却总是因为这而调试半天,才发现原来是虚指针惹的祸。我这几天在调试代码时候也中招了,我的问题是这样的,如下图,CTree是最底层基类(非虚类), CSamplerTree(虚类)派生自CTree,CMSamplerTre ...
如果说没有虚函数的虚继承只是一个噩梦的话,那么这里就是真正的炼狱。这个C++中最复杂的继承层次在VC上的实现其实我没有完全理解,摸爬滚打了一番也算得出了微软的实现方法吧,至于一些刁钻的实现方式我也想不到什么理由来解释它,也只算是知其然不知其所以然吧。
分2个阶段来探讨:
1. 有虚函数的派生类虚继承了没有虚函数的基类;
2. 有虚函数的派生类虚继承了有虚...
分类:
编程语言 时间:
2016-06-24 15:45:50
阅读次数:
285
1、虚函数简介
虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数。典型情况下,这一信息具有一种被称为vptr(virtual table pointer,虚函数表指针)的指针的形式。vptr 指向一个被称为 vtbl(virtual table,虚函数表)的函数指针数组,每一个包含虚函数的类都关联到
vtbl。当一个对象调用了虚函数,实际的被...
分类:
编程语言 时间:
2016-06-24 12:57:17
阅读次数:
242
在c++中,当一个类含有虚函数的时候,类就具有了多态性。构造函数的一项重要功能就是初始化vptr指针,这是保证多态性的关键步骤。 构造函数初始化vptr指针 下面是c++源码: class X { private: int i; public: X(int ii) { i = ii; } virtu ...
分类:
编程语言 时间:
2016-06-21 09:12:40
阅读次数:
263
1.无继承的普通类:
在有虚函数的情况下类会为其增加一个隐藏的成员,虚函数表指针,指向一个虚函数表,虚函数表里面就是类的各个虚函数的地址了。那么,虚函数表指针是以什么模型加入到类里面的,虚函数表里面又是怎么安排的呢。简单来看下就可以知道了。
#include"stdafx.h"
#pragma pack(8)
class A{
public:
int a...
分类:
编程语言 时间:
2016-06-21 07:30:32
阅读次数:
152
为什么使用虚函数?什么是虚函数?虚函数是为了解决什么问题? 面向对象的三大特征: 封装 多态 继承 什么是多态? 相同对象收到不同消息或不同对象收到相同消息时产生的不同的动作。 静态多态 vs 动态多态 [-:>静态多态也叫做早绑定 如上面的代码,他们函数名相同,参数个数不同,一看就是互为重载的两个 ...
分类:
编程语言 时间:
2016-06-20 23:46:02
阅读次数:
194
在C#中使用关键字 abstract 来定义抽象类和抽象方法。 不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例。 "一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被实例化,进一步一个抽象类只能通过接口和作为其它类的基类使用."- C++ Program ...
1.为什么会有string类处理char型数组,封装标准C中一些字符串处理函数。容器2.规格:有106个成员接口函数。有如此之多的原因:提高效率。(设计比较冗余,为了追求效率,省去了调用构造/析构函数及分配/释放内存的时间)用于实现常用操作3.实现:C++标准没有过多干预,不同厂商..
分类:
其他好文 时间:
2016-06-19 18:34:53
阅读次数:
147
一、虚函数的作用 以一个通用的图形类来了解虚函数的定义,代码如下: #include "stdafx.h" #include using namespace std; class Graph { protected: double x; double y; public: Graph(double ... ...
分类:
编程语言 时间:
2016-06-18 18:25:18
阅读次数:
210