七、C++ 多态

本文介绍了C++中的多态性,主要聚焦于虚函数和纯虚函数的概念。虚函数允许基类指针调用派生类的同名函数,而纯虚函数则是在基类中声明但不提供实现,强制派生类进行实现。通过实例展示了虚函数如何影响函数调用,从而实现动态多态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引言

在C++中,通过函数重载可以实现同一函数名不同的功能,即不同功能的函数使用同一名字。同样,在类中,也存在多态。不同的类之间存在继承,在基类中存在一个函数fun(),A类继承了基类,那么在A类中也存在func(),B类继承了基类,那么在B类中也存在func(),但是A类和B类中的函数名虽然与基类相同,但是实现却不一样,这就称为类的多态

二、实现

2.1 virtual:虚函数

在基类中,使用关键字virtual声明虚函数,告诉编译器不要将函数连接到基类中的函数

2.2 纯虚函数

如果只想在基类中声明函数,具体实现放在派生类中,这时可以使用纯虚函数

class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      // pure virtual function
    //   = 0 告诉编译器,函数没有主体,上面的虚函数是纯虚函数
      virtual int area() = 0;
};
  • 代码实现:
#include<iostream>
using namespace std;

class Shape{
    public:
        float height;
        float length;
        // 若不加入virtual,使用指针调用函数时,将
        // 调用基类中的函数
        // void area(){
        virtual void area(){
            cout << "area of shape:"<<endl;
        }
};

class Rec:public Shape{
    public:
    void area(){
        cout << "area of rec:"<<endl;
    }
};

class Tri:public Shape{
    public:
    void area(){
        cout << "area of tri:"<<endl;
    }
};

int main(){
    // 直接定义Rec,Tri类,此时输出是各个类中的输出
    Rec rec;
    Tri tri;
    rec.area();
    tri.area();

    cout << "**************"<<endl;

    Shape *shape;
    shape = &rec;
    // 若不加入virtual,编译器将会把area()函数
    // 链接到基类中的函数,加入virtual后,将只会
    // 查看指针指向的内容,而不是看指针的类型
    // 所指向的内容
    shape->area();
    shape = &tri;
    shape->area();
}
  • 运行结果:
area of rec:
area of tri:
**************
area of rec:
area of tri:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值