c++ 计算几何形状的面积:覆盖、重载、隐藏、多态、纯虚函数、虚析构、初始化父类的应用

本文详细介绍了C++中成员函数的覆盖、重载和隐藏的概念及区别。通过实例展示了如何在派生类中覆盖基类的虚函数,实现函数重载,并解释了隐藏现象。同时,提供了具体的代码示例,包括形状类、矩形类、圆形类和正方形类的定义,以及多态的使用,以帮助读者理解这些概念的实际应用。
摘要由CSDN通过智能技术生成

覆盖、重载、隐藏

成员函数覆盖(override,也称重写)
是指派生类重新定义基类的虚函数,特征如下:
A、不同的作用域(分别位于派生类与基类)
B、函数名字相同
C、参数相同
D、基类函数必须有virtual关键字,不能有static
E、返回值相同
F、重写函数的权限访问限定符可以不同

成员函数重载(overload)
是指函数名相同,参数不同(数量、类型、次序),特征如下:
A、相同的范围(在同一个作用域中)
B、函数名字相同
C、参数不同
D、virtual 关键字可有可无
E、返回值可以不同

成员函数隐藏(也称重定义)
A、不在同一个作用域(分别位于派生类与基类)
B、函数名字相同
C、返回值可以不同
D、参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意与重载的区别)
E、参数相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏(注意与覆盖的区别)

应用:定义形状类、矩形类、圆形类、正方形类

#include <iostream>

using namespace std;

class shape{
public:
    virtual float cal_area() = 0;   //纯虚函数 计算面积
    virtual ~shape(){};   //虚析构
    void prt_value(){cout<<"获取值"<<endl;}    //打印属性
};
class rect:public shape{
private:
    float length;
    float width;
public:
    rect(){}
    //重载
    rect(float l, float w):length(l),width(w){}
    //覆盖
    float cal_area(){return length*width;}
    //隐藏
    void prt_value(){
        printf("length=%.2f  width=%.2f\n", length, width);
    }
};
class circle:public shape{
private:
    float r;
public:
    circle(int r){this->r = r;}
    float cal_area(){return 3.14*r*r;}
    void prt_value(){
        printf("r=%.2f\n", r);
    }
};
class square:public rect{
private:
    float value;
public:
    //初始化父类
    square(int v):rect(v,v),value(v){}
};

测试和效果

int main()
{
    shape *p;   //多态
    rect r(4,5);    //长方形
    p = &r;
    float res = p->cal_area();
    cout<<"矩形面积:"<<res<<endl;
    r.prt_value();
    circle c(3);    //圆
    p = &c;
    res = p->cal_area();
    cout<<"圆形面积:"<<res<<endl;
    c.prt_value();
    square s(5);    //正方形
    p = &s;
    res = p->cal_area();
    cout<<"正方形面积:"<<res<<endl;
    s.prt_value();
    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值