1.non-virtual函数是在编译时完成解析的,根据该对象被调用时的类型来判断!!切记这点。2.凡基类定义有一个(或多个)虚函数,应该要将其destructor声明为virtual,但不要把destructor声明为纯虚函数。3.如果要跳过虚函数机制,使函数在编译时就完成解析,使用class s...
分类:
编程语言 时间:
2014-10-22 14:09:03
阅读次数:
184
在C++ 中,虚函数可以很好的实现多态,然而也有一定的局限,这个局限在于,虚函数必须在基类中定义,哪怕是空的实现。例如下面这段代码编译时就会出错:class Base{ virtual void print();};class Derived:Base{ void print() { cout .....
分类:
编程语言 时间:
2014-10-20 02:05:15
阅读次数:
211
C++基础之三大特性之多态(顾客,别走啊,我这是羊肉,不是狗肉啊)...
分类:
编程语言 时间:
2014-10-20 00:51:39
阅读次数:
209
所谓接口继承,就是派生类只继承函数的接口,也就是声明;而实现继承,就是派生类同时继承函数的接口和实现。我们都很清楚C++中有几个基本的概念,虚函数、纯虚函数、非虚函数。虚函数:虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承...
分类:
编程语言 时间:
2014-10-19 14:14:51
阅读次数:
139
类继承在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生。 从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。 1 //单继承的定义 2 class B:public A 3 { 4 5 }; 6 //多继承的定义 7 class C:public ...
分类:
编程语言 时间:
2014-10-16 21:28:33
阅读次数:
327
纯虚函数也是可以有实现体的,只是由于不能建立基类的对象,因此不能直接调用,但是可以在子类中通过作用域解析操作符静态调用。对于纯虚析构函数,它和普通的纯虚函数不同的地方在于它必须要提供实现体,这样的原因在于,纯虚析构函数最终需要被调用,以析构基类对象,如果不提供该析构函数的实现,将使得在析构过程中,析构无法完成而导致析构异常的问题,从而在链接阶段发生错误,所以,好的实现方案就是不要把虚析构函数设置为纯虚的...
分类:
其他好文 时间:
2014-10-14 22:39:39
阅读次数:
150
第十五章 多态性和虚函数
/**
* 书本:【ThinkingInC++】
* 功能:纯抽象类
* 时间:2014年10月6日13:10:28
* 作者:cutter_point
*/
#include
using namespace std;
enum note {middleC, Csharp, Cflat};
//创建一个抽象类
//基类
class Instrument
{
p...
分类:
编程语言 时间:
2014-10-06 15:02:20
阅读次数:
281
上一篇中我给各位说了一般人认为C++中较为难的东西——指针。其实对于C++,难点当然不局限在指针这玩意儿上,还有一些有趣的概念,如模板类、虚基类、纯虚函数等,这些都是概念性的东西,几乎每一本C++书上都会介绍,而平时我们除了会接触到纯虚函数外,其他的不多用。纯虚函数,你可以认为与C#中的抽象方法或接...
分类:
其他好文 时间:
2014-10-06 14:51:10
阅读次数:
261
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtu...
分类:
其他好文 时间:
2014-10-05 20:06:38
阅读次数:
208
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:cl...
分类:
其他好文 时间:
2014-10-03 20:06:35
阅读次数:
122