【C++ | 抽象类】纯虚函数 和 抽象基类,为什么需要抽象基类

07-21 1452阅读

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀

🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭

🤣本文内容🤣:🍭介绍 抽象基类 和 纯虚函数 🍭

😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭

⏰发布时间⏰:

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、纯虚函数
  • 🎄三、抽象基类
  • 🎄四、为什么需要抽象类
  • 🎄五、总结

    【C++ | 抽象类】纯虚函数 和 抽象基类,为什么需要抽象基类

    【C++ | 抽象类】纯虚函数 和 抽象基类,为什么需要抽象基类

    🎄一、概述

    在生活中,有时会使用到比较抽象的词语,例如下面这个场景:

    A:帮我把那个“东西”拿过来。
    B:你是说,桌面的那个杯子吗?
    A:是的。
    

    这个场景中的“东西”就属于抽象的词语。而在C++编程中,有时也会出现这样抽象的语法。例如,我们可能会定义一个“动物”基类,但代码中不会定义一个“动物”的实例,而是将“动物”基类派生出“狗”、“猫”等派生类,再使用派生类去实例化。

    本文主要介绍下面几个内容:

    1、什么是纯虚函数?

    2、什么是抽象基类?

    3、为什么需要抽象基类?


    【C++ | 抽象类】纯虚函数 和 抽象基类,为什么需要抽象基类

    🎄二、纯虚函数

    上篇文章:【C++ | 虚函数】虚函数详解 及 例子代码演示(包含虚函数使用、动态绑定、虚函数表、虚表指针),我们详细地介绍了虚函数以及C++怎样实现虚函数的,但有一个也是很重要的知识点没在上篇文章介绍,这个知识点就是 纯虚函数。

    纯虚函数:本质上也是虚函数,在虚函数的函数原型的分号前加上=0就可以将一个虚函数说明为纯虚函数。

    下面代码声明了一个虚函数 eat:

    virtual void eat() =0;
    

    纯虚函数的特点:

    1、纯虚函数声明就是在函数原型分号前加=0;

    2、纯虚函数允许只有声明,没有定义(实现);

    3、纯虚函数可以没有定义,也可以有定义,但纯虚函数的定义只能在类外。

    4、只有虚函数可以加=0,非虚函数加=0会编译报错:error: initializer specified for non-virtual method

    🌰举例子

    // g++ 24_pure_virtual.cpp
    #include 
    using namespace std;
    class CAnimal{
    public:
    	// 1、纯虚函数声明就是在函数原型分号前加`=0`
    	// 2、纯虚函数允许只有声明,没有定义(实现);
    	virtual void eat() =0;	
    	virtual void run() =0;
    };
    // 3、纯虚函数的定义只能在类外。
    inline void CAnimal::run()
    {
    	cout 
    	
    }
    
    public:
    	virtual void eat() =0;	// 纯虚函数,本类是抽象基类
    	virtual void run() =0;
    };
    class CCat : public CAnimal{
    public:
    	// 没有重写基类的所有纯虚函数,本类是抽象类
    	virtual void eat(){
    		cout 
    public:
    	// 重写基类的所有纯虚函数,本类不是抽象类
    	virtual void eat(){
    		cout 
    		cout 
    	cout 
    	//CAnimal animal;	// 报错:error: cannot declare variable ‘animal’ to be of abstract type ‘CAnimal’
    	//CCat cat;	// 报错:error: cannot declare variable ‘cat’ to be of abstract type ‘CCat’
    	CDog dog;
    	CAnimal *pAnimal = &dog;
    	pAnimal-run();
    	pAnimal-CAnimal::run(); // 指定调用基类的run
    }
    
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]