美文网首页CPP
纯虚函数的作用和实现方式

纯虚函数的作用和实现方式

作者: 顽强的猫尾草 | 来源:发表于2018-03-30 20:59 被阅读276次

一、作用:

定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

应该在什么情况下使用纯虚函数?
  1、当想在基类中抽象出一个方法,且该基类只做能被继承,而不能被实例化;
  2、这个方法必须在派生类(derived class)中被实现。

二、实现方式:

纯虚函数的声明,是在虚函数声明的结尾加 = 0,没有函数体。在派生类没有重新定义虚函数之前是不能调用的。

举个例子,我们先定义一个形状类(Cshape),但凡是形状我们都要求其能显示自己。所以这个类定义如下:

class CShape
{
    virtual void Show() {};
};

但没有 CShape 这种形状,因此我们不想让 CShape 这个类被实例化,我们首先想到的是将 Show 函数的定义(实现)部分删除:

class CShape
{
    virtual void Show();
};

当我们使用下面的语句实例化一个 CShape 时:

CShape cs;    // 这是我们不允许的,但仅用上面的代码是可以通过编译(但 link 时失败)

怎么样避免一个 CShape 被实例化,且在编译时就能被发现?
答案是:使用虚函数。

我们再次修改CShape类如下:

class CShape
{
public:
    virtual void Show() = 0;
};

这时在实例化 CShape 时就会有以下报错信息:

error C2259: 'CShape' : cannot instantiate abstract class due to following members:
warning C4259: 'void __thiscall CShape::Show(void)' : pure virtual function was not defined

我们再来看看被继承的情况。我们需要一个 CPoint2D 的类,它继承自 CShape。他必须实现基类(CShape)中的 Show() 方法。
其实使用最初的本意是让每一个派生自 CShape 的类,都要实现 Show() 方法,但时常我们可能在一个派生类中忘记实现,为了避免这种情况,虚函数发挥作用了。

我们看以下代码:

class CPoint2D:public CShape
{
public:
    CPoint2D()
    {
        printf("CPoint2D ctor is invoked/n");
    };
    void Msg()
    {
        printf("CPoint2D.Msg() is invoked/n");
    };

    /*---I'm sorry to forget implement the Show()---
    void Show()
    {
        printf("Show() from CPoint2D/n");
    };
    ------------------------------------------------*/
};

当我们实例化 CPoint2D 时,在编译时也会出现如下的报错:

error C2259: 'CShape' : cannot instantiate abstract class due to following members:
warning C4259: 'void __thiscall CShape::Show(void)' : pure virtual function was not defined

如上,我们预防了在派生类中忘记实现基类方法。

相关文章

  • 纯虚函数的作用和实现方式

    一、作用: 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。 应该在什...

  • 工厂模式

    概念 纯虚函数:是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数,纯虚函数本身没有实...

  • C++中的(纯)虚函数

    简介 本章节会介绍在C++中虚函数及纯虚函数的主要作用,C++也是通过虚函数实现动态绑定,本小节不会去讲述动态绑定...

  • 一些关于类的知识

    1.纯虚函数是实现接口的良好选择,拥有纯虚函数的类是抽象类,我们无法声明一个纯虚类的对象,只有当类派生纯虚类并实现...

  • 纯虚函数和抽象类

    纯虚函数和抽象类 概念 纯虚函数:没有函数体的虚函数。 抽象类:包含纯虚函数的类就称为抽象类。 纯虚函数就是在函数...

  • 抽象类和纯虚函数

    //纯虚函数 //如果父类中有了 纯虚函数 //1.子类继承父类,就必须要实现纯虚函数 //2.这个父类 就无法实...

  • 语法

    virtual 1.virtual声明的函数实现多态就是通用的多态实现 2.纯虚函数C++的纯虚函数用于表示一个类...

  • C++ 虚函数表和虚函数指针机制

    虚函数的作用是实现派生类继承基类的接口和一个默认的实现 那么是如何实现这种机制的呢?答案:通过虚函数表和虚函数指针...

  • 虚函数与纯虚函数的区别

    1.虚函数与纯虚函数 在他们的子类中都可以被重写.它们的区别是: (1)纯虚函数只有定义,没有实现;而虚函数既有定...

  • C++ 虚函数、纯虚函数、虚基类、抽象类

    纯虚函数:纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现...

网友评论

    本文标题:纯虚函数的作用和实现方式

    本文链接:https://www.haomeiwen.com/subject/wofwcftx.html