`

虚函数和纯续函数区别

 
阅读更多
C/C++::虚函数与纯虚函数  

2011-06-21 17:10:57|  分类: CPP |字号 订阅

 
虚函数必须是基类的非静态成员函数,其访问权限可以是 private、protected或public,为了将接口和多态分开,虚函数都应该是 private 的。STL库就遵循这个。
在基类的类定义中定义虚函数的一般形式:  
      virtual 函数返回值类型 虚函数名(形参表)  { 函数体 }

      class Parent
      {
      public:
          virtual void func_1() {cout<<"This is parent.";}
          void func_2 {cout<<"This is parent.";}
      };

      class Child
      {
      public:
         virtual void func_1 {cout<<"This is child.";}//这里可不写virtual关键字
         void func_2 {cout<<"This is child.";}
      };

      Parent *p = new Child;
      p->func_1();
      p->func_2();

      这里用父类的指针去指向一个子类的对象,p->func_1()会输出This is child。但是对于普通函数func_2(),就没有这种关系,因此p->func_2()还是输出This is parent,这就是 virtual 的作用。   

纯虚函数是一种特殊的虚函数,基类只定义了函数体,没有实现过程。它的一般格式如下:
   class <类名>  
      {
      virtual <类型><函数名>(<参数表>)=0;
  …  
    };

虚函数与纯虚函数区别

1、带纯虚函数的类称为虚基类,这种基类不能直接生成对象,而只有被继承并重写其虚函数后才能使用,这样的类叫抽象类。

2、虚函数本身有默认实现,它的作用是为了能让其在它的子类里可以被重载,以达到多态,而纯虚函数只是一个接口,仅仅是个函数声明,它必须在子类里实现。

3、虚函数在子类里也可以不重载,纯虚函数必须在子类里实现。有纯虚函数的类 不能被实例化。

 

分享到:
评论

相关推荐

    构造函数不能声明为虚函数,析构函数可以声明为虚函数

    2. **虚函数表未初始化**:虚函数机制依赖于虚函数表(vtable)和虚函数指针(vptr)。在对象构造过程中,vtable和vptr的初始化是必不可少的步骤之一。如果构造函数是虚函数,这意味着它需要访问尚未完全初始化的...

    C++虚函数实现原理

    - 在示例代码中,`Derived` 类继承了三个类,`Base1` 和 `Base2` 都有虚函数,因此 `Derived` 类会有自己的虚函数表,该表中会包含 `Base1` 和 `Base2` 的虚函数,以及 `Derived` 自身的虚函数。 #### 六、小结 ...

    C++中重载与重写函数区别及虚函数

    ### C++中重载与重写函数的区别及虚函数详解 #### 一、虚函数概述 **1.1 虚函数定义与作用** 在C++中,虚函数是一种特殊的成员函数,它允许子类覆盖父类的行为。虚函数的核心在于实现多态性,即在运行时动态决定...

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

    理解虚函数和纯虚函数的区别对于C++程序员来说至关重要,这有助于构建灵活、可扩展的面向对象程序。通过合理使用这两种特性,我们可以设计出层次清晰、易于维护的代码结构。在实际编程中,虚函数常用于基类和派生类...

    C++虚函数及虚函数表解析

    C++的虚函数和虚函数表是面向对象编程中实现多态性的重要机制。多态性允许通过基类指针或引用调用不同子类的重写方法,从而实现更灵活的设计和代码复用。 虚函数(Virtual Function)是基类中声明的一种特殊函数,...

    C++实验六 多态性和虚函数的应用 课程 实验报告

    在C++编程语言中,多态性和虚函数是面向对象编程的重要特性,它们允许程序员创建灵活且可扩展的代码结构。本次实验旨在深入理解和熟练运用这两个概念。实验报告的标题和描述表明,这是一个关于C++实验,特别是针对多...

    虚函数表解析

    ### 虚函数表解析 #### 一、引言与多态概念 在C++语言中,虚函数机制是实现面向...综上所述,虚函数表是C++中支持多态性的基础,通过对虚函数表的理解和运用,我们可以更好地掌握面向对象编程的核心概念之一:多态。

    虚函数与抽象函数的区别

    在C#语言中,虚函数(Virtual Function)与抽象函数(Abstract ...理解虚函数与抽象函数之间的区别,对于有效地设计和维护面向对象的软件系统至关重要。正确地应用这些特性,可以使代码更加灵活、可扩展和易于维护。

    c++多态性与虚函数练习题

    ### C++多态性与虚函数知识点解析 #### 一、多态性的概念 多态性是面向对象编程的一个...通过这些实验,你可以更深入地理解和掌握C++中的多态性、虚函数以及相关的高级特性。这些知识对于开发复杂的应用程序至关重要。

    C++ 虚函数表解析

    ### C++虚函数表解析深度剖析 在C++编程语言中,虚函数是实现多态性的关键机制之一,尤其在...通过本文的深入解析,希望能帮助读者更加深刻地理解C++虚函数表的工作原理,为进一步探索和应用多态性打下坚实的基础。

    为什么构造函数不能是虚函数

    构造函数不能作为虚函数,这是因为构造函数和虚函数的目的截然不同。下面详细解释这一点: 1. **概念上的不兼容性** - 构造函数的目标是初始化对象,而虚函数支持的是多态性,即不同类中的同名函数可以根据实际...

    C++中虚函数的原理和作用

    "C++ 中虚函数的原理和作用" 在 C++ 语言中,虚函数(Virtual Function)是一种非常重要的机制,它允许在继承关系中实现多态性(Polymorphism)。虚函数的存在使得我们可以在不同的类中实现相同的接口,但是具有...

    java和c++比较--虚函数和指针

    本文将基于“Java和C++比较--虚函数和指针”的主题,深入探讨两种语言在虚函数机制与指针使用上的差异,以及这些差异如何影响程序设计和性能。 ### 虚函数机制 #### C++中的虚函数 在C++中,虚函数是实现多态性的...

    C++中虚函数的实现机制

    C++中的虚函数通过使用`vptr`和`vtable`机制,在运行时实现了动态绑定,使得程序可以根据对象的实际类型调用不同的虚函数,从而实现了多态性。理解虚函数的实现机制对于编写高质量、可扩展的C++代码至关重要。

    虚函数虚表的详解,大家看看!

    虚函数和虚表是C++面向对象编程中的关键特性,它们是实现多态性的重要机制。虚函数使得可以通过基类指针或引用来调用派生类中的重定义函数,从而实现动态绑定。 首先,当一个类声明了一个或多个虚函数,系统就会为...

    Unity3d C# 虚函数 例子

    在 C# 中,虚函数是使用 virtual 关键字来声明的,当一个函数被声明为虚函数时,它可以被子类继承和重载。在编译期,虚函数并不会被静态编译,而是在运行期根据对象实例来动态判断要调用的函数。 在调用虚函数时,...

    虚函数分析论文

    为了更好地理解虚函数的性能影响以及如何通过静态分析对其进行优化,本文将探讨虚拟函数分析的具体方法和构建技术。 首先,需要明确虚函数的概念。在C++中,虚函数是一种特殊的成员函数,在基类中被声明为virtual,...

    虚函数表介绍示例代码

    在C++编程语言中,虚函数表(Virtual Function Table,简称vtable)是一个重要的概念,它主要用于实现多态性,这是面向对象编程的核心特性之一。本文将深入探讨虚函数表的概念,通过实例代码来帮助理解其工作原理。 ...

    C++箴言:避免析构函数调用虚函数

    这一原则在C++语言中尤为重要,因为它涉及到虚函数系统的本质以及类层次结构中对象的构造和析构顺序。 #### 析构函数与虚函数 在C++中,析构函数用于释放对象占用的资源。虚函数则允许在派生类中重写基类中的函数...

Global site tag (gtag.js) - Google Analytics