`
495081611
  • 浏览: 33118 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

纯虚函数和虚函数的区别和用途

    博客分类:
  • C++
阅读更多
C++中的虚函数和纯虚函数用法
         象这样定义的就是纯虚函数  
                virtual   void   f(void)   =   0;              
        象这样的就是虚函数  
                virtual   void   f(void);

  1.虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。

  2.虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。

  3.虚函数和纯虚函数都可以在子类(sub class)中被重载,以多态的形式被调用。

  4.虚函数和纯虚函数通常存在于抽象基类(abstract base class -ABC)之中,被继承的子类重载,目的是提供一个统一的接口。

  5.虚函数的定义形式:virtual {method body} ;纯虚函数的定义形式:virtual { } = 0; 在虚函数和纯虚函数的定义中不能有static标识符,原因很简单,被static修饰的函数在编译时候要求前期bind,然而虚函数却是动态绑定(run-time bind),而且被两者修饰的函数生命周期(life recycle)也不一样。

  6.如果一个类中含有纯虚函数,那么任何试图对该类进行实例化的语句都将导致错误的产生,因为抽象基类(ABC)是不能被直接调用的。必须被子类继承重载以后,根据要求调用其子类的方法。
面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念。因为它充分体现了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广。比如在微软的MFC类库中,你会发现很多函数都有virtual关键字,也就是说,它们都是虚函数。难怪有人甚至称虚函数是C++语言的精髓。

那么,什么是虚函数呢,我们先来看看微软的解释:

虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。

——摘自MSDN

有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。

---------------------------------------------------------------

定义纯虚函数就是为了让基类不可实例化化,
因为实例化这样的抽象数据结构本身并没有意义.
或者给出实现也没有意义
实际上我个人认为纯虚函数的引入,是出于两个目的,
1.为了安全.因为避免任何需要明确但是因为不小心而导致的未知的结果.
提醒子类去做应做的实现.
2.为了效率,不是程序执行的效率,而是为了编码的效率.

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jeanszu/archive/2009/09/11/4541552.aspx
分享到:
评论

相关推荐

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

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

    C++ 纯虚函数

    - `A`类定义了两个虚函数`f2()`和`f3()`,其中`f3()`是一个纯虚函数。 - `f3()`在`A`类中没有具体实现,这意味着任何从`A`派生的类都必须提供自己的实现。 - **派生类`B`**: - `B`类继承自`A`类,并实现了基类...

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

    综合上述内容,本例主要涉及C++中的多态性、纯虚函数、抽象类以及虚析构函数的使用和执行顺序。你需要理解这些概念,并在给定的主函数结构中,通过创建和管理对象来展示和分析多态行为,特别是虚析构函数的调用过程...

    C++之普通成员函数、虚函数以及纯虚函数的区别与用法要点

    在C++编程语言中,成员函数分为三种类型:普通成员函数、虚函数和纯虚函数。这三种函数各自具有不同的特点和用途,对于理解和利用面向对象编程的关键特性至关重要。 1. **普通成员函数(Non-virtual Member ...

    c++中虚函数和纯虚函数的作用与区别

    **虚函数和纯虚函数的区别**: 1. **实现**:虚函数在基类中可以有实现,子类可以选择重写或保留基类的实现。纯虚函数在基类中没有实现,必须由子类提供。 2. **对象创建**:含有虚函数的类可以实例化对象,而含有...

    多态性与虚函数习题

    - **解释**: 虚函数的重新定义需要保持与基类中虚函数相同的参数个数和类型。 8. **答案**: A.对象指针 - **解释**: 动态联编通常是通过对象指针或引用实现的,这里指针是最常见的用法。 9. **答案**: C....

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

    虚函数和纯虚函数是面向对象编程中的两个关键概念,主要在C++和Java中发挥作用。本文将深入探讨这两种函数的定义、用途以及它们在两种语言中的差异。 首先,让我们来理解虚函数。在C++中,虚函数是通过在基类中使用...

    C抽象基类和纯虚成员函数-C教程共3页.pdf.zip

    在C++中,一个纯虚函数是在基类中声明为虚函数,并且没有提供实现的函数。其声明形式为`virtual 函数名() = 0;`。纯虚函数的存在使得包含它的类成为抽象的,因此不能直接创建该类的实例。纯虚函数定义了一个必须由...

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

    举个例子,假设有一个`Shape`抽象基类,它定义了`area()`和`volume()`两个虚函数,表示形状的面积和体积,以及一个纯虚函数`shapeName()`,用于输出形状的名称。由于`shapeName()`是纯虚函数,`Shape`类不能实例化,...

    C++中类的分层设计(纯虚函数)

    在C++中,类的分层设计是一种高效且灵活的面向对象编程策略,它通过抽象类和纯虚函数的应用,使代码结构更加清晰,可扩展性更强。纯虚函数是这个设计模式的关键要素,它允许我们创建抽象基类,这些基类定义了一组...

    虚函数代码列子

    除了基本的虚函数,C++还提供了纯虚函数(`virtual void foo() = 0;`),它使得一个类成为抽象类,不能被实例化,只能作为其他类的基类。此外,还可以使用`override`关键字来明确指定派生类中的函数覆盖了基类的虚...

    第11次(虚函数).zip

    3. **虚函数的用途**:虚函数主要用于实现多态性,使得基类指针或引用可以调用子类的重写方法,提高代码的可扩展性和复用性。 4. **纯虚函数(Pure Virtual Function)**:如果一个基类中的虚函数没有实现,而是...

    C++程序设计基础PPT课件8-虚函数与多态性

    4. 虚函数的概念和用途,它是实现动态多态的关键。 5. 纯虚函数与抽象类的作用,以及它们在设计中的意义。 6. 基类指针和派生类指针的使用,以及它们如何与基类和派生类对象匹配。 7. 基类指针引用派生类对象时的...

    C++与操作系统等面试题30

    纯虚函数是一种特殊的虚函数,它没有具体的实现,在基类中被声明但没有定义,仅提供了一个函数的签名(即函数名和参数列表)。纯虚函数主要用于抽象基类中,表示该类是一个接口,不允许直接实例化。 #### 语法示例...

    C++ 虚函数表解析

    本文将深入探讨C++虚函数表的工作原理、用途以及如何解析它。 虚函数表是一个由编译器自动生成的隐式数据结构,通常用于动态绑定(即运行时确定函数调用)。在类层次结构中,如果一个基类包含至少一个虚函数,那么...

    Part7-多态与虚函数-KEY.pdf

    2. 纯虚函数:纯虚函数是一种特殊的虚函数,用`=0`来声明,没有函数体。含有纯虚函数的类被称为抽象类,抽象类不能被实例化,只能作为其他类的基类。派生类必须为基类中的纯虚函数提供实现,除非它也是一个抽象类。 ...

    C++面试问与答攻略技巧

    虚函数和纯虚函数的区别与用途 **虚函数**是指在基类中使用关键字`virtual`声明的成员函数。虚函数允许在派生类中通过基类指针或引用来调用派生类的版本,而不是基类的版本。这样的机制被称作动态绑定,或者称为...

    程序员面试宝典——自己整理

    - **纯虚函数**:纯虚函数是在声明虚函数时没有给出任何实现,而是以`= 0`标记的虚函数。包含纯虚函数的类被称为抽象类,这类类不能被实例化,其主要作用是作为其他类的基类,以强制派生类必须实现纯虚函数。 - **...

    对C++的总论理解

    - **纯虚函数**:一个没有具体实现的虚函数被称为纯虚函数。它可以出现在基类中,但需要在派生类中提供具体的实现。 - **抽象类**:含有至少一个纯虚函数的类称为抽象类。抽象类不能被实例化,主要用途是作为其他类...

Global site tag (gtag.js) - Google Analytics