c++day5

实现一个图形类(Shape),包含受保护成员属性:周长、面积,

公共成员函数:特殊成员函数书写

定义一个圆形类(Circle),继承自图形类,包含私有属性:半径

公共成员函数:特殊成员函数、以及获取周长、获取面积函数

定义一个矩形类(Rect),继承自图形类,包含私有属性:长度、宽度

公共成员函数:特殊成员函数、以及获取周长、获取面积函数

在主函数中,分别实例化圆形类对象以及矩形类对象,并测试相关的成员函数。

cpp 复制代码
#include <iostream>

using namespace std;

class Shape
{
protected:
    float perimeter;  //周长
    float area;//面积

public:
    //无参构造函数
    Shape()
    {
        cout<<"Shape:无参构造"<<endl;
    }
    //有参构造函数
    Shape(float a,float b):perimeter(a),area(b)
    {
        cout<<"Shape:有参构造"<<endl;
    }
    //析构函数
    ~Shape()
    {
        cout<<"Shape:析构函数"<<endl;
    }
    //拷贝构造函数
    Shape(const Shape &other):perimeter(other.perimeter),area(other.area)
    {
        cout<<"Shape:拷贝构造函数"<<endl;
    }
    //定义拷贝赋值函数
    Shape & operator=(const Shape &other)
    {
        if(this != &other)          //确定不是自己给自己赋值
        {
            this->perimeter = other.perimeter;
            this->area = other.area;
        }
        cout<<"Shape: 拷贝赋值函数"<<endl;
        return  *this;             //返回自身引用
    }

    void show()
    {
        cout<<"*******************"<<endl;
        cout<<"该图形的周长为"<<perimeter<<endl;
        cout<<"该图形的面积为"<<area<<endl;
        cout<<"*******************"<<endl;
    }

};
class Circle:public Shape
{
private:
    int radius;
public:
    //无参构造函数
    Circle()
    {
        cout<<"Circle:无参构造"<<endl;
    }
    //有参构造函数
    Circle(int r):radius(r)
    {
        cout<<"Circle:有参构造"<<endl;
    }
    //拷贝构造函数
    Circle(const Circle &other):radius(other.radius)
    {
        cout<<"Circle:拷贝构造函数"<<endl;
    }
    //拷贝赋值函数
    Circle & operator=(const Circle &other)
    {
        if(this != &other)          //确定不是自己给自己赋值
        {
            this->radius = other.radius;
        }
        cout<<"Circle: 拷贝赋值函数"<<endl;
        return  *this;             //返回自身引用
    }
    //析构函数
    ~Circle()
    {
        cout<<"Circle:析构函数"<<endl;
    }
    //获取周长
    using Shape::perimeter;
    float perimeter_get()
    {
        this->perimeter=2*3.14*radius;
        return perimeter;
    }
    //获取面积函数
    using Shape::area;
    float area_get()
    {
        this->area=3.14*radius*radius;
        return area;
    }
};
class Rect:public Shape
{
private:
    int length;
    int hight;
public:
    //无参构造函数
    Rect()
    {
        cout<<"Rect:无参构造"<<endl;
    }
    //有参构造函数
    Rect(int l,int h):length(l),hight(h)
    {
        cout<<"Rect:有参构造"<<endl;
    }
    //拷贝构造函数
    Rect(const Rect &other):length(other.length),hight(other.hight)
    {
        cout<<"Rect:拷贝构造函数"<<endl;
    }
    //拷贝赋值函数
    Rect & operator=(const Rect &other)
    {
        if(this != &other)          //确定不是自己给自己赋值
        {
            this->length = other.length;
            this->hight = other.hight;
        }
        cout<<"Rect: 拷贝赋值函数"<<endl;
        return  *this;             //返回自身引用
    }
    //析构函数
    ~Rect()
    {
        cout<<"Rect:析构函数"<<endl;
    }
    //获取周长
    float perimeter_get()
    {
        this->perimeter=2*(length+hight);
        return this->perimeter;
    }
    //获取面积函数
    float area_get()
    {
        this->area=length*hight;
        return this->area;
    }
};
int main()
{
    Circle c1(5);
    c1.perimeter_get();//获取圆形周长
    c1.area_get();//获取圆形面积
    c1.show();//打印周长面积
    Rect r1(4,5);
    r1.perimeter_get();//获取矩形周长
    r1.area_get();//获取矩形面积
    r1.show();//打印周长面积
    return 0;
}
相关推荐
故事和你919 小时前
洛谷-数据结构1-4-图的基本应用2
开发语言·数据结构·算法·深度优先·动态规划·图论
吴可可1239 小时前
C#合并首尾相连多段线实战
算法·c#
KMDxiaozuanfeng9 小时前
卡梅德生物技术快报|SPR 技术应用|基于 SPR 亲和力的中药活性成分筛选系统实现与数据分析
科技·算法·面试·考试
꧁细听勿语情꧂10 小时前
数据结构概念和算法、时间复杂度、空间复杂度引入
c语言·开发语言·数据结构·算法
Felven10 小时前
B. The 67th 6-7 Integer Problem
数据结构·算法
玉树临风ives10 小时前
atcoder ABC 454 题解
算法·深度优先·图论
钮钴禄·爱因斯晨10 小时前
聚焦操作系统中的PV操作
数据库·算法·系统架构·c#
云泽80810 小时前
笔试算法 - 双指针篇(一):移动零、复写零、快乐数与盛水容器
c++·算法
不才小强11 小时前
目标跟踪算法DeepSort实战
人工智能·算法·目标跟踪
papership11 小时前
【入门级-数学与其他:1.数及其运算:进制与进制转换:二进制、八进制、十进制、十六进制】
算法