C++基础(十六)-C++ 虚构函数Virtual

1. C++ 多态Virtual

在基类中声明一个函数为虚函数,使用关键字virtual。

  • 派生类可以重写(override)这个虚函数。
  • 调用虚函数时,会根据对象的实际类型来决定调用哪个版本的函数。

2. 虚构函数Virtual定义

  • 虚构函数
  • 纯虚构函数
  • 非虚构函数
class Base {
public:
    virtual void func1();      // 虚函数
    virtual void func2() = 0;  // 纯虚函数
    void func3();              // 非虚函数
};

2. 举例

  • 基类 Aminal.h
  • 子类 Dog.h
  • Dog.cpp 实现类
2.1 Aminal.h
#ifndef AMINAL_H
#define AMINAL_H
#include <iostream>
using namespace std;
class Aminal {
protected:  
    int count; 
public:
    Aminal(){
    cout<<"---Aminal---构造函数-----"<<endl;
    };
    ~Aminal(){
    cout<<"---Aminal---析构函数-----"<<endl;
    };
    virtual int getCount() = 0;
    virtual  int getNumt(){
       return 0;
     };
};
#endif

2.2 Dog.h
#ifndef DOG_H
#define DOG_H
#include "Aminal.h"
class Dog : public Aminal {
public: 
    Dog();
    ~Dog();
    int getCount();
    int getNum();
};
#endif

2.3 Dog.cpp
#include <iostream>
#include "Dog.h"
using namespace std;
Dog::Dog()
{
    cout<<"----Dog---构造函数-----"<<endl;
}
Dog::~Dog()
{
    cout<<"----Dog--析构函数-----"<<endl;
}
int Dog::getCount(){
    count = 101;  // 初始化基类的 count
    return count;
};
int Dog::getNum(){
    count = 101;  // 初始化基类的 count
    return count;
};

3. 知识点

  • virtual 虚拟函数关键字。
  • 若是基类中定义了纯虚构函数,那么基类无需实现,子类必须实现。
  • 若是基类中定义了 虚构函数,那么基类必须实现,子类实现-可选。
  • 若是基类中定义了 非虚构函数,那么基类实现-可选,子类实现-可选。
  • override 虚拟函数关键字。
  • 子类使用override 关键字,基类必须使用virtual。
  • 子类没使用override关键字,基类使用virtual-可选。
  • 子类使用override关键字,是为了校验与重写函数是否有问题。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容