`
wsql
  • 浏览: 11794209 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

虚函数、纯虚函数详解

 
阅读更多
1.首先:强调一个概念
定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。定义他是为了实现一个接口,起到一个规范的作用,规范继承这个。类的程序员必须实现这个函数。

2.关于实例化一个类:
有纯虚函数的类是不可能生成类对象的,如果没有纯虚函数则可以。比如:
classCA
{
public:
virtualvoidfun()=0;//说明fun函数为纯虚函数
virtualvoidfun1();
};

classCB
{
public:
virtualvoidfun();
virtualvoidfun1();
};

//CA,CB类的实现
...

voidmain()
{
CAa;//不允许,因为类CA中有纯虚函数
CBb;//可以,因为类CB中没有纯虚函数
...
}

3.虚函数在多态中间的使用:
多态一般就是通过指向基类的指针来实现的。

4.有一点你必须明白,就是用父类的指针在运行时刻来调用子类:
例如,有个函数是这样的:
voidanimal::fun1(animal*maybedog_maybehorse)
{
maybedog_maybehorse->born();
}
参数maybedog_maybehorse在编译时刻并不知道传进来的是dog类还是horse类,所以就把它设定为animal类,具体到运行时决定了才决定用那个函数。也就是说用父类指针通过虚函数来决定运行时刻到底是谁而指向谁的函数。

5.用虚函数
#include<iostream.h>

classanimal
{
public:
animal();
~animal();
voidfun1(animal*maybedog_maybehorse);
virtualvoidborn();
};

voidanimal::fun1(animal*maybedog_maybehorse)
{
maybedog_maybehorse->born();
}

animal::animal() { }
animal::~animal() { }
voidanimal::born()
{
cout<<"animal";
}
///////////////////////horse
classhorse:publicanimal
{
public:
horse();
~horse();
virtualvoidborn();
};

horse::horse() { }
horse::~horse() { }
voidhorse::born()
{
cout<<"horse";
}
///////////////////////main
voidmain()
{
animala;
horseb;
a.fun1(&b);
}

//output:horse

6.不用虚函数
#include<iostream.h>
classanimal
{
public:
animal();
~animal();
voidfun1(animal*maybedog_maybehorse);
voidborn();
};

voidanimal::fun1(animal*maybedog_maybehorse)
{
maybedog_maybehorse->born();
}

animal::animal() { }
animal::~animal() { }
voidanimal::born()
{
cout<<"animal";
}
////////////////////////horse
classhorse:publicanimal
{
public:
horse();
~horse();
voidborn();
};

horse::horse() { }
horse::~horse() { }
voidhorse::born()
{
cout<<"horse";
}
////////////////////main
voidmain()
{
animala;
horseb;
a.fun1(&b);
}
//output:animal
分享到:
评论

相关推荐

    c++纯虚函数的用法及详解

    在c++学习的过程中,尤其是自学,遇到这样那样的函数,尤其是虚函数这一块,并且虚函数的类型还多,让人真是头痛,这个是我在学习过程中搜索的一点资料,希望对大家能够有所帮助。

    C++ 虚函数的详解及简单实例

    C++ 虚函数的详解 虚函数的使用和纯虚函数的使用。 虚函数是在基类定义,然后子类重写这个函数后,基类的指针指向子类的对象,可以调用这个函数,这个函数同时保留这子类重写的功能。 纯虚函数是可以不用在基类定义...

    详解C++纯虚函数与抽象类

    1.虚函数 1.1虚函数简介 虚函数可以毫不夸张的说是C++最重要的特性之一,我们先来看一看虚函数的概念。 在基类的定义中,定义虚函数的一般形式为: virtual 函数返回值类型 虚函数名(形参表) { 函数体 } 为什么...

    深入解析C++编程中的纯虚函数和抽象类

    C++纯虚函数详解 有时在基类中将某一成员函数定为虚函数,并不是基类本身的要求,而是考虑到派生类的需要,在基类中预留了一个函数名,具体功能留给派生类根据需要去定义。 纯虚函数是在声明虚函数时被“初始化”为0...

    C++ 中const修饰虚函数实例详解

    C++ 中const修饰虚函数实例详解 【1】程序1 #include using namespace std; class Base { public: virtual void print() const = 0; }; class Test : public Base { public: void print(); }; void Test::print...

    详解C++ 多态的实现及原理

    C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;... 5:纯虚函数是虚函数再加上

    C++100天经典实战系(含大量案例源码及通俗讲解教程,effective_c++、STL、综合能力全面提升)

    友元函数与友元类、引用与指针那些事、深入浅出C++虚函数的vptr与vtable、宏那些事、范围解析运算符那些事、从初级到高级的enum那些事、纯虚函数和抽象类、volatile、virtual、using、union、this、struct_class、...

    C++入门指南-v2.4.pdf

    5.3 纯虚函数和抽象类 95 六、C++运算符重载 97 6.1 运算符重载语法介绍 97 6.2 可重载运算符与不可重载运算符 98 6.3 一元运算符重载 99 6.4 二元运算符重载 102 6.5 关系运算符重载 104 6.6 输入/输出运算符重载(&gt;...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    15.1.3 抽象类和纯虚函数 448 15.2 指针和虚函数 451 15.2.1 虚函数和扩展类型兼容性 451 15.2.2 向下转换和向上转换 456 15.2.3 C++如何实现虚函数 457 第16章 模板 461 16.1 函数模板 461 16.2 类模板 ...

    C++ override关键字使用详解

    C++ override从字面意思上,是覆盖的意思,实际上在C++中它是覆盖了一个方法并且对其重写,从而达到不同的作用。在我们C++编程过程中,最熟悉的就是对接口方法的实现,在接口中一般只是对方法进行了... // 1) 纯虚函数

    C++语言描述(PDF合集)

    12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法 394 12.10.1 宽度优先搜索 394 12.10.2 类Network 395 12.10.3 BFS的实现 395 12.10.4 BFS的复杂性分析 396 ...

Global site tag (gtag.js) - Google Analytics