`
lc52520
  • 浏览: 369214 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

纯虚函数

J# 
阅读更多

一、定义.

纯虚函数是在基类 中声明的虚函数,它在基类中没有定义 ,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”

virtual void funtion1()=0

二、引入原因:

1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。
2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。

为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性 。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。

三、相似概念:

1、多态性

指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。

a.编译时多态性:通过重载函数 实现

b 运行时多态性:通过虚函数 实现。

2、虚函数

虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态重载

3、抽象类

包含 虚函数的类称为抽象类 。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。

程序举例

基类:

class A 
{
public:
 A();
 void f1();
 virtual void f2();
 virtual void f3()=0;
 virtual ~A();

};
子类:
class B : public A 
{
public:
 B();
 void f1();
 void f2();
 void f3();
 virtual ~B();

};
 

主函数:

int main(int argc, char* argv[])
{
 A *m_j=new B();
 m_j->f1();
 m_j->f2();
 m_j->f3();
 delete m_j;
 return 0;
}
 

 

f1()是一个普通的重载.
调用m_j->f1();会去调用A类中的f1(),它是在我们写好代码的时候就会定好的.
也就是根据它是由A类定义的,这样就调用这个类的函数.
f2()是虚函数.
调用m_j->f2();会调用m_j中到底保存的对象中,对应的这个函数.这是由于new的B
对象.
f3()与f2()一样,只是在基类中不需要写函数现实.

分享到:
评论

相关推荐

    纯虚函数接口 实现的dll动态链接库,

    本示例中的"纯虚函数接口 实现的dll动态链接库"是一个设计模式,通过抽象类定义接口,并将其实现封装在一个DLL中。下面我们将深入探讨这一主题。 首先,让我们了解纯虚函数。在C++中,虚函数是基类中声明的成员函数...

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

    ### C++纯虚函数的用法及详解 #### 一、引言 在学习C++的过程中,虚函数是一个重要的概念,特别是在实现多态性时。本文将深入探讨纯虚函数的概念及其在C++中的应用。 #### 二、C++中的多态与虚函数 在C++中,多...

    纯虚函数和抽象类的实例

    在C++编程语言中,纯虚函数和抽象类是面向对象设计的重要概念,它们为创建灵活、可扩展的代码提供了基础。在这个实例中,我们将深入理解这两个概念,并结合《Visual C++2012入门经典(第6版)》中的Ex9_10来探讨它们的...

    函数覆盖,虚函数,纯虚函数对比

    在C++编程语言中,函数覆盖、虚函数和纯虚函数是面向对象编程中的关键概念,它们涉及到类的继承和多态性。本文将详细探讨这三个概念,以及它们之间的对比。 1. **函数覆盖(Function Overriding)** 函数覆盖发生...

    C++ 纯虚函数

    ### C++纯虚函数详解 #### 一、纯虚函数定义及作用 纯虚函数是C++中一种特殊的虚函数,它在基类中声明但不提供具体的实现,其主要目的是为派生类提供一个必须重写的接口。通过在基类中声明纯虚函数,可以确保所有...

    Java与C++在虚函数,纯虚函数上的区别

    ### Java与C++在虚函数、纯虚函数上的区别详解 #### Java的抽象函数与C++的虚函数 在深入探讨两者之间的差异之前,我们先理解一下Java与C++各自如何处理多态性,尤其是通过虚函数和抽象函数实现。 **Java**中,...

    Qt/C++抽象类和纯虚函数讲解示例源代码

    该资源是博主博客的源代码,博客上有详细讲解Qt/C++关于纯虚函数和抽象基类原理讲解和示例用法解释,博客地址如下: https://blog.csdn.net/naibozhuan3744/article/details/94488200 其中编译环境为QtCreator4.5.0...

    C++_虚函数和纯虚函数区别

    在C++编程语言中,虚函数和纯虚函数是实现多态性的关键机制,但它们具有不同的特点和用途。首先,我们需要了解什么是虚函数。虚函数是基类中通过关键字virtual声明的成员函数,它允许派生类重新定义该函数,从而实现...

    C++_虚函数和纯虚函数区别(高清版).rar

    在C++编程语言中,虚函数(Virtual Functions)和纯虚函数(Pure Virtual Functions)是面向对象编程的重要特性,它们都是实现多态性的方式,但各自有着不同的应用场景和功能特点。下面将详细解释这两个概念以及它们...

    c++中纯虚函数和抽象类1

    在C++编程语言中,纯虚函数和抽象类是实现多态性的重要概念。多态允许我们使用基类指针或引用操作不同派生类的对象,从而实现更加灵活的代码设计。以下是关于纯虚函数和抽象类的详细解释: 1. **纯虚函数**: - ...

    C++中的虚函数和纯虚函数用法(ZT)

    ### C++中的虚函数与纯虚函数详解 #### 一、引言 在面向对象编程中,多态性是一项非常重要的特性,它允许程序通过基类指针或引用调用派生类的方法。C++中实现多态性的主要机制之一就是虚函数。虚函数和纯虚函数是...

    虚函数和纯虚函数.pdf

    虚函数和纯虚函数是C++面向对象编程中的核心概念,它们主要涉及到继承和多态性的实现。在C++中,虚函数(virtual function)允许我们通过基类指针或引用调用派生类中重定义的同名函数,从而实现动态绑定或运行时多态...

    [C++][Basic] C++父类中实现的纯虚函数体的测试

    在C++编程语言中,纯虚函数(pure virtual function)是一种特殊的虚函数,它被声明为没有函数体,通常在基类中定义,用于强制所有派生类必须重写这个函数。这种机制是C++多态性的重要组成部分,使得我们可以创建...

    C++虚函数多态和纯虚函数多态的经典示例源码

    多态性主要通过虚函数(Virtual Functions)来实现,而纯虚函数(Pure Virtual Functions)则进一步扩展了这种机制,为创建抽象基类和接口提供了可能。下面我们将深入探讨这两个概念以及它们在实际编程中的应用。 ...

    纯虚函数与抽象类的概念

    系统的介绍C++里面的虚函数与抽象类概念,并举例概述

    TCP_Server_and_Client.rar_TCP服务器类_纯虚函数

    在这个“TCP_Server_and_Client.rar”压缩包中,包含了一个TCP服务器类的设计,利用了面向对象编程中的纯虚函数特性,以实现灵活的任务扩展和移植性。 TCP服务器类通常是基于套接字编程实现的,它监听特定端口,...

    C++中虚函数和纯虚函数区别[归类].pdf

    C++虚函数和纯虚函数的区别 C++ 中的虚函数和纯虚函数是两种不同的函数声明方式,用于实现多态(polymorphism)机制。 虚函数 虚函数声明如下:virtual ReturnType FunctionName(Parameter) ;虚函数必须实现,如果...

    5.2+纯虚函数与抽象类1

    在C++编程中,"纯虚函数与抽象类"是一个重要的面向对象概念,它们是实现多态性的重要机制。在给定的描述中,我们看到一个关于二维图形类族的设计问题,这涉及到如何通过抽象基类(即抽象类)和纯虚函数来构建一个...

    多态——纯虚函数与抽象类.zip

    在本例中,我们关注的是通过纯虚函数和抽象类实现的多态性。纯虚函数和抽象类是C++实现多态机制的关键工具。 首先,让我们了解一下什么是抽象类。一个包含至少一个纯虚函数的类被称为抽象类。在C++中,纯虚函数被...

Global site tag (gtag.js) - Google Analytics