c++ 手写queue循环队列

news2025/1/15 23:56:30

继承与多态

继承

父子出现同名的成员问题

#include <iostream>

using namespace std;
//父子类中出现重名成员
//定义一个父类
class Father{
public:
    string name;
protected:
    int pwd;
private:
    int money;
public:
    Father(){
        cout<<"Father::构造"<<endl;
    }
    Father(string n,int p,int m):name(n),pwd(p),money(m){
        cout<<"Father::有参"<<endl;
    }

};
//定义子类
class Son:public Father{
public:
    int name;//可以重名
};
class Test{
public:
    Father f;
};

int main()
{
   Father father;
   Son son;
   Test test;
   //使用子类成员和父类成员的同名函数
   cout<<"&son="<<&son.name<<endl;//子类name
   cout<<"&father="<<&son.Father::name<<endl;///访问父类name

   cout<<"&test="<<&test<<endl;
   cout<<"&test.f="<<&test.f<<endl;
    return 0;
}

关于继承中特殊成员函数

#include <iostream>

using namespace std;
//父子类中出现重名成员
//定义一个父类
class Father{
public:
    string name;
protected:
    int pwd;
private:
    int money;
public:
    Father(){
        cout<<"Father::构造"<<endl;
    }
    Father(string n,int p,int m):name(n),pwd(p),money(m){
        cout<<"Father::有参"<<endl;
    }
    ~Father(){
        cout<<"析构"<<endl;
    }
    //拷贝构造
    Father(const Father & other):name(other.name),pwd(other.pwd),money(other.money){
        cout<<"Father::拷贝构造"<<endl;
    }
    //拷贝赋值
    Father&operator=(const Father&other){
        if(this!=&other){
            this->name=other.name;
            this->pwd=other.pwd;
            this->money=other.money;
        }
        cout<<"Father::拷贝赋值函数"<<endl;
        return *this;
    }
    void show(){
        cout<<"Father::name = "<<name<<endl;
        cout<<"Father::pwd = "<<pwd<<endl;
        cout<<"Father::money = "<<money<<endl;
    }


};
//定义子类
class Son:public Father{

private:
    string toy;
public:
    Son(){
        cout<<"Son::无参构造"<<endl;
    }
    ~Son(){cout<<"Son::析构函数"<<endl;}
    Son(const Son& other):Father(other),toy(other.toy)
    {
        cout<<"Son::拷贝构造函数"<<endl;
    }
    Son(string n, int p, int m, string t): Father(n, p, m), toy(t)
    {
        cout<<"Son::有参构造"<<endl;
    }
    void show()
    {
        //        cout<<"Father::name = "<<name<<endl;
        //        cout<<"Father::pwd = "<<pwd<<endl;
        //        cout<<"Father::money = "<<money<<endl;         //子类中无法访问父类的私有成员
        Father::show();                     //调用父类提供的show函数
        cout<<"toy = "<<toy<<endl;
    }

};


int main()
{
    Son s1("xx",123,5,"a");
    s1.show();
    Son s2(s1);
    s2.show();
    return 0;
}

练习:将图形类的获取周长和获取面积函数设置成虚函数,完成多态 再定义一个全局函数,能够在该函数中实现:无论传递任何图形,都可以输出传递的图形的周长和面积

#include <iostream>

using namespace std;

class Shape{
    double perimeter;
    double area;
public:
    //构造
    Shape(){
        cout<<"Shape::无参"<<endl;
    }
    //拷贝构造
    Shape(const Shape & other):perimeter(other.perimeter),area(other.area)
    {
        cout<<"拷贝构造函数"<<endl;
    }
    //拷贝赋值
    Shape & operator =(const Shape & other){
        if(this==&other){
            return *this;
        }
        perimeter=other.perimeter;
        area=other.area;
        return *this;
    }
    ~Shape(){
        cout<<"shape::析构"<<endl;
    }
    virtual void show(){
        cout<<"perimeter"<<perimeter<<endl;
        cout<<"area"<<area<<endl;
    }
    double getPer(){
        return perimeter;
    }
    double getArea(){
        return area;
    }
    void setPer(double p){
        this->perimeter=p;
    }
    void setArea(double a){
        this->area=a;
    }
    
};

class Rectangle:public Shape
{
private:
    int wide;
    int high;
public:
    Rectangle(){}
    Rectangle(int w,int h):wide(w),high(h){}
    ~Rectangle(){}
    Rectangle(const Rectangle &other):Shape(other),wide(other.wide),high(other.high){}
    Rectangle & operator= (const Rectangle &other)
    {
        
        if(this != &other)
        {
            Shape::operator=(other);
            this->wide = other.wide;
            this->high = other.high;
        }
        return *this;
    }
    //重写父类虚函数
    void show()
    {
        cout<<"矩形 长:"<<wide<<" 宽:"<<high<<endl;
        
        cout<<"perimeter"<<get_perimeter()<<endl;
        cout<<"area"<<get_area()<<endl;
    }
    
    int get_perimeter()
    {
        this->setPer( 2.0*(wide+high));
        return Shape::getPer();
    }
    
    int get_area()
    {
        this->setArea( 1.0*wide*high);
        return Shape::getArea();
    }
};

//定义一个圆类
class Circle:public Shape
{
private:
    int radius;
public:
    Circle(){}
    Circle(int r):radius(r){}
    ~Circle(){}
    Circle(const Circle &other):Shape(other),radius(other.radius){}
    Circle & operator= (const Circle &other)
    {
        if(this != &other)
        {
            Shape::operator=(other);
            this->radius = other.radius;
        }
        return *this;
    }
    //重写父类虚函数
    void show()
    {
        cout<<"圆形 半径:"<<radius<<endl;
        
        cout<<"perimeter"<<get_perimeter()<<endl;
        cout<<"area"<<get_area()<<endl;
    }
    
    int get_perimeter()
    {
        this->setPer( 2*3.14*radius);
        return Shape::getPer();
    }
    
    int get_area()
    {
        this->setArea( 3.14*radius*radius);
        return Shape::getArea();
    }
    
    
};
void display( Shape & shape){
    shape.show();
}
int main()
{
    Rectangle rec(10,20);
    Circle cir(10);
    display(rec);
    display(cir);
    return 0;
}

手动实现一个循环顺序队列

#include<iostream>
using namespace std;
class myqueue{
int front;//头
int rear;//尾部
int maxSize;//最大容量
int *data;//存储元素

public:
myqueue():front(0),rear(0),maxSize(0),data(NULL){

}
//有参构造最大k
myqueue(int k):front(0),rear(0),maxSize(k+1),data(new int[k+1]){
cout<<"有参构造"<<endl;
}
//拷贝构造
myqueue(const myqueue & other):front(other.front),rear(other.rear),maxSize(other.maxSize),data(new int[other.maxSize]){
    memcpy(data,other.data,sizeof(int)*maxSize);
}

//拷贝赋值
myqueue & operator = (const myqueue &other){
    if(this==&other) return *this;
    front=other.front;
    rear=other.rear;
    maxSize=other.maxSize;
    int *temp=new int[maxSize];
    delete [] data;
    data=temp;
    return *this;
}

int myfront(){
    return data[front];
}
int back(){
    if(empty()){
        return -1;
    }
    return data[(rear-1+maxSize)%maxSize];
}
bool empty(){
    return rear==front;
}
bool full(){
    return (rear+1)%maxSize==front;
}
int size(){
    return (front-rear+maxSize)%maxSize;
}
//入队
bool push(int val){
if(full()) return false;
data[rear]=val;
rear=(rear+1)%maxSize;
return true;
}
//出队
int pop(){
    if(empty()) return -1;
    int res=data[front];
    front=(front+1)%maxSize;
    return res;
}
void show(){
    for(int i=front;i!=rear;i=(i+1)%maxSize){
        cout<<data[i]<<" ";
    }
    cout<<endl;
}
};

int main(){
    myqueue a(5);
    a.push(1);
    a.push(2);
    a.push(3);
    a.push(4);
    a.push(5);
    a.pop();
    a.push(6);
    a.show();
}

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

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

相关文章

【已解决】【记录】2AI大模型web UI使用tips 本地

docker desktop使用 互动 如果需要发送网页链接&#xff0c;就在链接上加上【#】号 如果要上传文件就点击这个➕号 中文回复 命令它只用中文回复&#xff0c;在右上角打开【对话高级设置】 输入提示词&#xff08;提示词使用英文会更好&#xff09; Must reply to the us…

Deep4SNet: deep learning for fake speech classification

Deep4SNet&#xff1a;用于虚假语音分类的深度学习 摘要&#xff1a; 虚假语音是指即使通过人工智能或信号处理技术产生的语音记录。生成虚假录音的方法有"深度语音"和"模仿"。在《深沉的声音》中&#xff0c;录音听起来有点合成&#xff0c;而在《模仿》中…

Docker save load 镜像 tag 为 <none>

一、场景分析 我从 docker hub 上拉了这么一个镜像。 docker pull tomcat:8.5-jre8-alpine 我用 docker save 命令想把它导出成 tar 文件以便拷贝到内网机器上使用。 docker save -o tomcat-8.5-jre8-alpine.tar.gz 镜像ID 当我把这个镜像传到别的机器&#xff0c;并用 dock…

备战蓝桥杯 队列和queue详解

目录 队列的概念 队列的静态实现 总代码 stl的queue 队列算法题 1.队列模板题 2.机器翻译 3.海港 双端队列 队列的概念 和栈一样&#xff0c;队列也是一种访问受限的线性表&#xff0c;它只能在表头位置删除&#xff0c;在表尾位置插入&#xff0c;队列是先进先出&…

工厂物流管理系统方案(二):危险品车辆专用导航系统架构设计深度剖析

本文专为IT架构师、物流技术专家、软件开发工程师及对危险品运输导航技术有深入探索需求的读者撰写&#xff0c;旨在全面解析危险品车辆专用导航系统的架构设计&#xff0c;展现其技术深度与复杂性&#xff0c;为行业同仁提供权威的技术参考与实践指导。如需获取危险品车辆专用…

用 Python 从零开始创建神经网络(十九):真实数据集

真实数据集 引言数据准备数据加载数据预处理数据洗牌批次&#xff08;Batches&#xff09;训练&#xff08;Training&#xff09;到目前为止的全部代码&#xff1a; 引言 在实践中&#xff0c;深度学习通常涉及庞大的数据集&#xff08;通常以TB甚至更多为单位&#xff09;&am…

No.1|Godot|俄罗斯方块复刻|棋盘和初始方块的设置

删掉基础图标新建assets、scenes、scripts文件夹 俄罗斯方块的每种方块都是由四个小方块组成的&#xff0c;很适合放在网格地图中 比如网格地图是宽10列&#xff0c;高20行 要实现网格的对齐和下落 Node2D节点 新建一个Node2D 添加2个TileMapLayer 一个命名为Board&…

蓝桥云客第 5 场 算法季度赛

题目&#xff1a; 2.开赛主题曲【算法赛】 - 蓝桥云课 问题描述 蓝桥杯组委会创作了一首气势磅礴的开赛主题曲&#xff0c;其歌词可用一个仅包含小写字母的字符串 S 表示。S 中的每个字符对应一个音高&#xff0c;音高由字母表顺序决定&#xff1a;a1,b2,...,z26。字母越靠后…

刀客doc:快手的商业化架构为什么又调了?

一、 1月10日&#xff0c;快手商业化及电商事业部进行新一轮的架构调整。作为2025年快手的第一次大调整&#xff0c;变动最大的是负责广告业务的商业化事业部。快手商业化将原来的8个业务中心&#xff0c;现在统合成了5个&#xff0c;行业归拢看上去更加明晰了。 根据自媒体《…

6.2 MySQL时间和日期函数

以前我们就用过now()函数来获得系统时间&#xff0c;用datediff()函数来计算日期相差的天数。我们在计算工龄的时候&#xff0c;让两个日期相减。那么其中的这个now函数返回的就是当前的系统日期和时间。 1. 获取系统时间函数 now()函数&#xff0c;返回的这个日期和时间的格…

mock服务-通过json定义接口自动实现mock服务

go-mock介绍 不管在前端还是后端开发过程中&#xff0c;当我们需要联调其他服务的接口&#xff0c;而这个服务还没法提供调用时&#xff0c;那我们就要用到mock服务&#xff0c;自己按接口文档定义一个临时接口返回指定数据&#xff0c;以供本地开发联调测试。 怎么快速启动一…

sparkSQL练习

1.前期准备 &#xff08;1&#xff09;建议先把这两篇文章都看一下吧&#xff0c;然后把这个项目也搞下来 &#xff08;2&#xff09;看看这个任务 &#xff08;3&#xff09;score.txt student_id,course_code,score 108,3-105,99 105,3-105,88 107,3-105,77 105,3-245,87 1…

CSS | 实现三列布局(两边边定宽 中间自适应,自适应成比)

目录 示例1 &#xff08;中间自适应 示例2&#xff08;中间自适应 示例3&#xff08;中间自适应 示例4 &#xff08;自适应成比 示例5&#xff08;左中定宽&#xff0c;右边自适应 示例6&#xff08;中间自适应 示例7&#xff08;中间自适应 示例8&#xff08;中间定宽…

力扣 子集

回溯基础&#xff0c;一题多解&#xff0c;不同的回朔过程。 题目 求子集中&#xff0c;数组的每种元素有选与不选两种状态。因此在使用dfs与回溯时把每一个元素分别进行选与不选的情况考虑即可。可以先用dfs跳过当前元素即不选然后一直深层挖下去&#xff0c;直到挖到最深了即…

网络层协议-----IP协议

目录 1.认识IP地址 2.IP地址的分类 3.子网划分 4.公网IP和私网IP 5.IP协议 6.如何解决IP地址不够用 1.认识IP地址 IP 地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址。 它是分配给连接到互联网的设备&#xff08;如计算机、服务器、智能手机…

RocketMQ 知识速览

文章目录 一、消息队列对比二、RocketMQ 基础1. 消息模型2. 技术架构3. 消息类型4. 消费者类型5. 消费者分组和生产者分组 三、RocketMQ 高级1. 如何解决顺序消费和重复消费2. 如何实现分布式事务3. 如何解决消息堆积问题4. 如何保证高性能读写5. 刷盘机制 &#xff08;topic 模…

C++(类和对象)

C中的类 C中兼容对C语言中struct的所有用法.同时C对struct进行了语法的升级.将struct升级成了类. // c中对于struct的改进: struct Stack {int* a;int top;int capacity; } int main() { Stack s;// 这里可以直接使用Stack进行使用,而不再需要struct关键字了return 0; }注意:…

centos 8 中安装Docker

注&#xff1a;本次样式安装使用的是centos8 操作系统。 1、镜像下载 具体的镜像下载地址各位可以去官网下载&#xff0c;选择适合你们的下载即可&#xff01; 1、CentOS官方下载地址&#xff1a;https://vault.centos.org/ 2、阿里云开源镜像站下载&#xff1a;centos安装包…

Sui Move:基本概览一

Module (模块) Move 代码被组织成模块, 可以把一个模块看成是区块链上的一个智能合约 可以通过调用这些模块中的函数来与模块进行交互&#xff0c;可以通过事务或其他 Move 代码来实现, 事务将被发送到并由Sui区块链进行处理&#xff0c;一旦执行完成&#xff0c;结果的更改将…

1/13+2

运算符重载 myString.h #ifndef MYSTRING_H #define MYSTRING_H #include <cstring> #include <iostream> using namespace std; class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度int capacity; …