C++ 纯虚函数

Posted 我是小白呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 纯虚函数相关的知识,希望对你有一定的参考价值。

C++ 纯虚函数

概述

纯虚函数 (pure virtual function) 是只有函数的名字而不具备函数的功能, 不能被调用的虚成员函数.

基类的虚函数有时是考虑到派生类的需求, 在基类中预留一个函数名. 我们在设计类的时候, 常常有基类的成员函数并无意义, 具体功能由派生类决定, 这时候纯虚函数就派上用场了.

在这里插入图片描述

纯虚函数

纯虚函数没有函数体, 最后面的 “=0” 只起形式上的作用, 告诉编译系统 “这是纯虚函数”.

格式:

virtual 函数类型 函数名 (参数表列) =0;

例如:

virtual float area()=0;  // 纯虚函数
virtual float area() const =0;  // 纯虚常函数
virtual float area() const {return 0};  // 虚函数

如果一在一个类中声明了纯虚函数, 而在其派生类中没用对该函数定义, 则该函数在派生类中仍为纯虚函数.

例子

Animal 类:

#ifndef PROJECT6_ANIMAL_H
#define PROJECT6_ANIMAL_H

#include <iostream>
using namespace std;

class Animal {
public:
    virtual void bark() = 0;
};

#endif //PROJECT6_ANIMAL_H

Dog 类:

#ifndef PROJECT6_DOG_H
#define PROJECT6_DOG_H

#include "Animal.h"

class Dog : public Animal{
public:
    void bark() {
        cout << "汪汪!" << endl;
    }
};

#endif //PROJECT6_DOG_H

Cat 类:

#ifndef PROJECT6_CAT_H
#define PROJECT6_CAT_H

#include "Animal.h"

class Cat : public Animal{
public:
    void bark() {
        cout << "喵喵!" << endl;
    }
};

#endif //PROJECT6_CAT_H

Pig 类:

#ifndef PROJECT6_PIG_H
#define PROJECT6_PIG_H

#include "Animal.h"

class Pig : public Animal {
public:
    void bark() {
        cout << "哼哼!" << endl;
    }
};

#endif //PROJECT6_PIG_H

main:

#include <iostream>
#include "Animal.h"
#include "Dog.h"
#include "Cat.h"
#include "Pig.h"
using namespace std;

int main() {
    Animal *pt;
    Dog d1;
    Cat c1;
    Pig p1;

    pt = &d1;
    pt->bark();
    pt = &c1;
    pt->bark();
    pt = &p1;
    pt->bark();

    return 0;
}

输出结果:

汪汪!
喵喵!
哼哼!

以上是关于C++ 纯虚函数的主要内容,如果未能解决你的问题,请参考以下文章

C++ 纯虚函数和抽象类

C++ 纯虚函数和抽象类

C++ 纯虚函数

C++ 运行时多态

Hello,C++纯虚函数和抽象类

一个例子搞懂C++的虚函数和纯虚函数