1月14日作业

news2025/1/15 11:57:07

将图形类的获取周长和获取面积函数设置成虚函数,完成多态

#include <iostream>
#include <cmath>
#define PI 3.14159
using namespace std;

// 父类:图形类
class Shape
{
protected:
    double perimeter;
    double area;
public:
    Shape():perimeter(0),area(0) {}
    Shape(double p,double a):perimeter(p),area(a) {}
    virtual ~Shape() {}

    // 拷贝构造函数
    Shape(const Shape& other):perimeter(other.perimeter),area(other.area) {}

    // 拷贝赋值运算符
    Shape& operator=(const Shape& other)
    {
        if(this!=&other)
        {
            perimeter=other.perimeter;
            area=other.area;
        }
        return *this;
    }

    virtual double getPerimeter() const {return perimeter;}
    virtual double getArea() const {return area;}
};

// 子类:矩形类
class Rectangle:public Shape
{
private:
    double width;
    double height;
public:
    Rectangle(double w,double h):width(w),height(h)
    {
        perimeter=2*(width+height);
        area=width*height;
    }
    ~Rectangle() {}

    // 拷贝构造函数
    Rectangle(const Rectangle& other):Shape(other),width(other.width),height(other.height) {}

    // 拷贝赋值运算符
    Rectangle& operator=(const Rectangle& other)
    {
        if(this!=&other)
        {
            Shape::operator=(other);
            width=other.width;
            height=other.height;
        }
        return *this;
    }

    double getWidth() const {return width;}
    double getHeight() const {return height;}
};

// 子类:圆类
class Circle:public Shape
{
private:
    double radius;
public:
    Circle(double r):radius(r)
    {
        perimeter=2 * PI * radius;
        area=PI * radius * radius;
    }
    ~Circle() {}

    // 拷贝构造函数
    Circle(const Circle& other):Shape(other),radius(other.radius) {}

    // 拷贝赋值运算符
    Circle& operator=(const Circle& other)
    {
        if(this!=&other)
        {
            Shape::operator=(other);
            radius=other.radius;
        }
        return *this;
    }

    double getRadius() const { return radius; }
};

// 全局函数:打印图形信息
void printf(const Shape& shape)
{
    cout<<"周长: "<<shape.getPerimeter()<<endl;
    cout<<"面积: "<<shape.getArea()<<endl;
}
int main()
{

    // 创建矩形对象并测试
    Rectangle rect(3.0, 4.0);
    cout<<"矩形:"<<endl;
    cout<<"宽: "<<rect.getWidth()<<endl;
    cout<<"高: "<<rect.getHeight()<<endl;
    printf(rect);

    // 创建圆对象并测试
    Circle circle(5.0);
    cout<<"圆:"<<endl;
    cout<<"半径: "<<circle.getRadius()<<endl;
    printf(circle);

    return 0;
}

运行结果:

手动完成一个循环顺序队列

#include <iostream>

using namespace std;

class Queue
{
private:
    int* data;//存储队列元素的数组
    int capacity;//队列的容量
    int head;//指向队列头部的索引
    int tail;//指向队列尾部的索引
    int count;//当前队列中的元素数量

public:
    //构造函数,初始化队列
    Queue(int cap):capacity(cap),head(0),tail(0),count(0)
    {
        data=new int[capacity];
    }

    //析构函数,释放动态分配的内存
    ~Queue()
    {
        delete[] data;
    }

    //拷贝赋值运算符,实现深拷贝
    Queue& operator=(const Queue& other)
    {
        if(this!=&other)
        {
            delete[] data;
            capacity=other.capacity;
            head=other.head;
            tail=other.tail;
            count=other.count;
            data=new int[capacity];
            for(int i=0;i<capacity;++i)
            {
                data[i]=other.data[i];
            }
        }
        return *this;
    }

    // 访问第一个元素
    int front()
    {
        if(empty())
        {
            cerr<<"队列为空"<<endl;
            exit(EXIT_FAILURE);
        }
        return data[head];
    }

    // 访问最后一个元素
    int back()
    {
        if(empty())
        {
            cerr<<"队列为空"<<endl;
            exit(EXIT_FAILURE);
        }
        return data[(tail-1+capacity)%capacity];
    }

    // 判空
    bool empty() const
    {
        return count==0;
    }

    // 返回容纳的元素数
    int size() const
    {
        return count;
    }

    // 尾插元素
    void push(int value)
    {
        if (count==capacity)
        {
            cerr<<"队列已满"<<endl;
            return;
        }
        data[tail]=value;
        tail=(tail+1)%capacity;
        ++count;
    }

    // 头删元素
    void pop()
    {
        if(empty())
        {
            cerr<<"队列为空"<<endl;
            return;
        }
        head=(head+1)%capacity;
        --count;
    }

    // 遍历队列并展示各个元素
    void traverse() const
    {
        if(empty())
        {
            cout<<"队列为空"<<endl;
            return;
        }
        cout<<"队列中的元素:";
        for(int i=0;i<count;++i)
        {
            cout<<data[(head+i)%capacity]<<" ";
        }
        cout<<endl;
    }
};

int main()
{
    Queue queue(5); // 创建一个容量为5的循环队列
    queue.push(1); // 插入元素1
    queue.push(2); // 插入元素2
    queue.push(3); // 插入元素3
    queue.push(4); // 插入元素4
    queue.push(5); // 插入元素5

    cout<<"队首元素:"<<queue.front()<<endl;
    cout<<"队尾元素:"<<queue.back()<<endl;
    cout<<"队列大小:"<<queue.size()<<endl;

    queue.traverse();//遍历

    queue.pop();//头删
    cout<<"删除队首元素后队首元素:"<<queue.front()<<endl;
    cout<<"删除队首元素后队列大小:"<<queue.size()<<endl;

    queue.traverse();//再次遍历

    return 0;
}

运行结果:

今天课堂代码实现一遍:

思维导图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Springboot + vue实现的文档管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

Spring Boot 2 学习指南与资料分享

Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今竞争激烈的 Java 后端开发领域&#xff0c;Spring Boot 2 凭借其卓越的特性&#xff0c;为开发者们开辟了一条高效、便捷的开发之路。如果你渴望深入学习 Spring Boot 2&#xff0c;以下这份精心…

高级软件工程-复习

高级软件工程复习 坐标国科大&#xff0c;下面是老师说的考试重点。 Ruby编程语言的一些特征需要了解要能读得懂Ruby程序Git的基本命令操作知道Rails的MVC工作机理需要清楚&#xff0c;Model, Controller, View各司什么职责明白BDD的User Story需要会写&#xff0c;SMART要求能…

easyui datagrid表头和网格错位问题

问题&#xff1a;表头与数据网格错位 解决&#xff1a; 在onLoadSuccess事件中调用fitColumns方法 $(this).datagrid(‘fitColumns’);

React方向:react中5种Dom的操作方式

1、通过原生JS获取Dom去操作 通过document.querySelector(#title)原生js的方式去拿到dom节点&#xff0c;然后去进行操作。 import {Component} from "react";class App extends Component {//定义获取Dom的函数handleGetDom(){let title document.querySelector(#t…

【深度学习】多目标融合算法(二):底部共享多任务模型(Shared-Bottom Multi-task Model)

目录 一、引言 1.1 往期回顾 1.2 本期概要 二、Shared-Bottom Multi-task Model&#xff08;SBMM&#xff09; 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 三、总结 一、引言 在朴素的深度学习ctr预估模型中&#xff08;如DNN&#xff09;&#xff0c;通常以一个行…

天机学堂3-ES+Caffeine

文章目录 day05-问答系统表 用户端分页查询问题目标效果代码实现 3.6.管理端分页查询问题ES相关 管理端互动问题分页实现三级分类3.6.5.2.多级缓存3.6.5.3.Caffeine 4.评论相关接口目标效果新增回答或评论 day05-问答系统 效果&#xff1a; 表 互动提问的问题表&#xff1a…

【Docker】Docker部署多种容器

关于docker&#xff0c;Windows上使用Powershell/CMD执行指令&#xff0c;Linux系统直接使用终端执行指令。 docker安装MySQL 拉取MySQL 也可以跳过拉取步骤&#xff0c;直接run&#xff0c;这样本地容器不存在的话&#xff0c;会自动拉取最新/指定的版本。 # 默认拉取最新…

【Flink】Flink内存管理

Flink内存整体结构图&#xff1a; JobManager内存管理 JVM 进程总内存(Total Process Memory)Flink总内存(Total Flink Memory)&#xff1a;JVM进程总内存减去JVM Metaspace(元空间)和JVM Overhead(运行时开销)上图解释&#xff1a; JVM进程总内存为2G;JVM运行时开销(JVM Overh…

如何规模化实现完全自动驾驶?Mobileye提出解题“新”思路

在CES 2025上&#xff0c;Mobileye展示了端到端自动驾驶系统Mobileye Drive™&#xff0c;通过高度集成的传感器、算法和计算平台&#xff0c;可以实现自动驾驶功能的全覆盖。 Mobileye创始人兼首席执行官Amnon Shashua教授 期间&#xff0c;Mobileye创始人兼首席执行官Amnon …

Qt 5.14.2 学习记录 —— 십일 QLCDNumber、QProgressBar、QCalendarWidget

文章目录 1、QLCDNumber2、ProgressBar3、QCalendarWidget 1、QLCDNumber 写一个倒计时程序。拖一个LCD Number到界面&#xff1a; 定时器用Qt的QTimer类&#xff0c;这个类的对象会产生一个timeout信号&#xff0c;通过start方法来开启定时器&#xff0c;并且参数中设定触发ti…

简要认识JAVAWeb技术三剑客:HTMLCSSJavaScript

目录 一、web标准二、什么是HTML三、什么是CSS四、什么是JavaScript 黑马JAVAWeb飞书在线讲义地址&#xff1a; https://heuqqdmbyk.feishu.cn/wiki/LYVswfK4eigRIhkW0pvcqgH9nWd 一、web标准 Web标准也称网页标准&#xff0c;由一系列的标准组成&#xff0c;大部分由W3C&…

sosadmin相关命令

sosadmin命令 以下是本人翻译的官方文档&#xff0c;如有不对&#xff0c;还请指出&#xff0c;引用请标明出处。 原本有个对应表可以跳转的&#xff0c;但是CSDN的这个[](#)跳转好像不太一样&#xff0c;必须得用html标签&#xff0c;就懒得改了。 sosadmin help 用法 sosadm…

【C语言】字符串函数详解

文章目录 Ⅰ. strcpy -- 字符串拷贝1、函数介绍2、模拟实现 Ⅱ. strcat -- 字符串追加1、函数介绍2、模拟实现 Ⅲ. strcmp -- 字符串比较1、函数介绍2、模拟实现 Ⅳ. strncpy、strncat、strncmp -- 可限制操作长度Ⅴ. strlen -- 求字符串长度1、函数介绍2、模拟实现&#xff08…

IO进程day6

一、思维导图 二、练习题1 有一个隧道&#xff0c;长1000m&#xff0c;有一辆高铁&#xff0c;每秒100米&#xff0c;有一辆快车&#xff0c;每秒50m 要求模拟这两列火车通过隧道的场景。 #include <stdio.h> #include <unistd.h> #include <pthread.h>pthre…

手撕代码: C++实现按位序列化和反序列化

目录 1.需求 2.流程分析 3.实现过程 4.总结 1.需求 在我们正在开发的项目&#xff0c;有这样一种需求&#xff0c;实现固定格式和自由格式的比特流无线传输。解释一下&#xff0c;固定格式形如下面表格&#xff1a; 每个字段都有位宽、类型等属性&#xff0c;这种固定格式一…

期望最大化算法:机器学习中的隐变量与参数估计的艺术

引言 在机器学习和统计学领域&#xff0c;许多实际问题涉及到含有隐变量的概率模型。例如&#xff0c;在图像识别中&#xff0c;图像的语义信息往往是隐变量&#xff0c;而我们能观测到的只是图像的像素值&#xff1b;在语音识别中&#xff0c;语音对应的文本内容是隐变量&…

2025封禁指定国家ip-安装xtables-addons记录

如何安装和使用 安装lux仓库(该仓库包含xtables-addons所需的依赖环境) # wget http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm # rpm -ivh lux-release-7-1.noarch.rpm 安装xtables-addons。注意&#xff1a;必须先安装kmod-xtables-addons&#xff0c;再…

使用C语言实现栈的插入、删除和排序操作

栈是一种后进先出(LIFO, Last In First Out)的数据结构,这意味着最后插入的元素最先被删除。在C语言中,我们可以通过数组或链表来实现栈。本文将使用数组来实现一个简单的栈,并提供插入(push)、删除(pop)以及排序(这里采用一种简单的排序方法,例如冒泡排序)的操作示…

【Go】Go Gin框架初识(一)

1. 什么是Gin框架 Gin框架&#xff1a;是一个由 Golang 语言开发的 web 框架&#xff0c;能够极大提高开发 web 应用的效率&#xff01; 1.1 什么是web框架 web框架体系图&#xff08;前后端不分离&#xff09;如下图所示&#xff1a; 从上图中我们可以发现一个Web框架最重要…