c++ 手写queue循环队列

news/2025/1/15 22:27:03/

继承与多态

继承

父子出现同名的成员问题

#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;//子类namecout<<"&father="<<&son.Father::name<<endl;///访问父类namecout<<"&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.ppmy.cn/news/1563439.html

相关文章

USB 驱动开发 --- Gadget 驱动框架梳理(一)

本文由 Linux 内核文档翻译与总结而来&#xff0c;个人学习笔记仅供参考。 Gadget 框架 在 USB 协议交互过程中&#xff0c;角色定义&#xff1a; the device driver is the master (or “client driver”) Linux 内核中称为 HCD(Host Controller Driver)&#xff0c;负责与 …

Flask表单处理与验证

Flask是一个轻量级的Python框架&#xff0c;它通过扩展库提供了对表单处理与验证的支持。WTForms是一个流行的Flask扩展库&#xff0c;用于创建和验证Web表单。它提供了一种声明式的方法来定义表单结构和验证逻辑&#xff0c;使得表单处理更为简洁和优雅。下面&#xff0c;我们…

第一章:走入HTML

目录 一、HTML的简介  1.介绍 2.HTML的概念和功能 3.HTML的发展历史 二、准备工作 1.编译器的安装 2.相关插件 &#xff08;1&#xff09;中文插件 &#xff08;2&#xff09;Live Server插件 3.快捷键配置方式 三、HTML的基本结构 1.HTML的基本结构 2.快捷方式 四、总…

4Hive计算引擎

4Hive计算引擎 1 MR计算引擎2 Tez计算引擎3 Spark计算引擎 目前Hive支持MapReduce、Tez和Spark 三种计算引擎。 1 MR计算引擎 MR运行的完整过程&#xff1a; Map在读取数据时&#xff0c;先将数据拆分成若干数据&#xff0c;并读取到Map方法中被处理。数据在输出的时候&#…

6.1 MySQL数字函数和条件函数

以前我们在课程中使用过一些mysql的内置函数&#xff0c;比如说四舍五入的round函数&#xff0c;做日期计算的data, datediff函数等等。那么本次课程咱们就来系统的学习一下mysql的这些内置函数&#xff0c;我们使用编程语言写程序的时候&#xff0c;通常会把某一项业务功能封装…

linux stdout/stderr重定向到文件,>或tee

正常情况下直接使用 >或者tee命令只能把stdout的终端输出重定向到文件中&#xff0c;而stderr的输出是无法写到文件中的。 比如在使用svn up时遇到svn 报错的错误&#xff0c;svn ERROR/WARNING 用下面的语句是不会将ERROR/WARNING行写到svn.log的 svn up | tee svn.log…

好用的php商城源码有哪些?

选择一个优秀的商城工具&#xff0c;能更好地帮助大家建立一个好用的商城系统。目前比较流行的都是开源PHP商城系统&#xff0c;那么现实中都有哪些好用的PHP商城源码值得推荐呢&#xff1f;下面就带大家一起来了解一下。 1.TigShop 【推荐指数】&#xff1a;★★★★★☆ 【推…

【MySQL数据库】基础总结

目录 前言 一、概述 二、 SQL 1. SQL通用语法 2. SQL分类 3. DDL 3.1 数据库操作 3.2 表操作 4. DML 5. DQL 5.1 基础查询 5.2 条件查询 5.3 聚合函数 5.4 分组查询 5.5 排序查询 5.6 分页查询 6. DCL 6.1 管理用户 6.2 权限控制 三、数据类型 1. 数值类…