期末速成C++【大题汇总完】

目录

1.单例模式

2.RTTI

3.删除小于平均数的元素-无效迭代器

4.排序

5.函数/运算符重载声明

6.复数类

7.点和三角形

总结


1.单例模式

#include<iostream>
using namespace std;//单例模式
class Foo {
public://类的构造析构函数(略)//针对name GetName-return SetName-name=strstring GetName() { return name; }void SetName(string str) { name = str; }//注意!列表初始化是构造函数特有的(:),域操作符(::)//针对静态变量_instance-staticstatic Foo* GetInstance() {if (_instance == nullptr){_instance = new Foo;}return _instance;}private:Foo() {};//私有构造函数static Foo* _instance;string name;
};//_instance初始化为nullptr
Foo* Foo::_instance = nullptr;//类外_instance
//Foo* Foo::GetInstance()
//{
//	if (_instance == nullptr)
//	{
//		_instance = new Foo;
//	}
//	return _instance;
//}//域外实现
//string Foo::GetName()
//{
//	return name;
//}//void Foo::SetName(string str)
//{
//	name = str;
//}void Fun()
{Foo* q = Foo::GetInstance();q->SetName("Alice");
}
int main()
{Foo* p = Foo::GetInstance();//Foo::p->SetName("Bob");Fun();cout << p->GetName() << endl;
}

2.RTTI

#include<iostream>
#include<vector>
#include<list>
#include<fstream>
using namespace std;
//RTTI
//animal动物-Bird鸟-Dog狗-Cat猫
//1.动物都会吃饭
//2.动物都会叫,鸟-叽叽,狗-汪汪
//3.鸟-飞,狗-跑//1.容器指针
//2.文件读写入-ifs
// 3.重载
//4.遍历RTTIclass Animal {
public:Animal(string str):name(str){}virtual ~Animal(){}//1.共同的void Eat() { cout << "吃饭饭" << endl; }//2.共同-方式不同的-纯虚析构函数virtual void shout() = 0;
private:string name;
};//域外-构造析构
//Animal::Animal(string str) :name(str){}
//Animal::~Animal() {}//在类外实现的时候,虚析构函数是不带virtual关键字
//void Animal::Eat()
//{
//	cout << "吃饭饭" << endl;
//}//鸟
class Bird :public Animal {
public:Bird(string str):Animal(str){}~Bird(){}//2.void shout() { cout << "吱吱" << endl; }//3.void Fly() { cout << "飞" << endl; }
};//void Bird::shout() { cout << "吱吱" << endl; }
//void Bird::Fly() { cout << "飞" << endl; }class Dog :public Animal {
public:Dog(string str):Animal(str){}~Dog(){}//2.void shout() { cout << "汪汪" << endl; }//3.void Run() { cout << "跑" << endl; }};//void Dog::shout() { cout << "汪汪" << endl; }
//void Dog::Run() { cout << "跑" << endl; }//重载
ifstream& operator>>(ifstream& ifs, vector<Animal*>& all)
{string type,name;ifs >> type >> name;if (type == "狗"){all.push_back(new Dog(name));}if (type == "鸟"){all.push_back(new Bird(name));}return ifs;
}int main()
{vector<Animal*>allAnimal;//容器里面是类指针一个一个的狗、鸟//文件操作ios:in-以读的方式从date文件输出ifsifstream ifs("data.txt", ios::in);while (!ifs.eof())//ifs流输出{ifs >> allAnimal;}ifs.close();//遍历for (Animal* p : allAnimal){p->Eat();p->shout();//3.if (typeid(*p) == typeid(Dog)){Dog* pd = dynamic_cast<Dog*>(p);pd->Run();}if (typeid(*p) == typeid(Bird)){Bird* pb = dynamic_cast<Bird*>(p);pb->Fly();}}//释放for (Animal* pt : allAnimal){delete pt;}
}

3.删除小于平均数的元素-无效迭代器

//删除小平平均数的元素-无效迭代器
//1.插入10个随机数-打印显示出来
//2.计算平均数-输出平均数
//3.for循环遍历:删除小平平均数的元素-打印出来
//拼写正确#include <iostream> 
#include <list>
#include<vector>
#include <algorithm> 
#include <numeric>   
using namespace std;int main()
{vector<int> all;//1.generate_n(back_inserter(all), 10, []() {return rand() % 100; });copy(all.begin(), all.end(), ostream_iterator<int>(cout, " "));//2.float ave = static_cast<float>(accumulate(all.begin(), all.end(), 0)) / all.size();cout << "ave:" << ave << endl;//3.vector<int>::iterator itr;//指针for (auto itr = all.begin(); itr != all.end(); ){if (*itr < ave){itr = all.erase(itr);}else{itr++;}}
}

4.排序

//排序
//1.默认
//2.greate
//3.二元谓词cop1
//4.lambda表达式
//5.重载cop2类#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool cop1(float f1, float f2)
{return ((int)f1 % 10) > ((int)f2 % 10);
}class cop2 {
public:cop2(int cen):center(cen){}bool operator()(float f1, float f2){return (abs(f1 - center)) < (abs(f2 - center));}
private:int center;
};
int main()
{vector<float> vc;sort(vc.begin(), vc.end());//默认升序sort(vc.begin(), vc.end(), greater<float>());//默认降序greater<float>()sort(vc.begin(), vc.end(), cop1);//二元谓词-不传参-降序int cen = 99;sort(vc.begin(), vc.end(), [cen](float f1, float f2) { return (abs(f1 - cen)) > (abs(f2 = cen)); });//lambda表达式sort(vc.begin(), vc.end(), cop2(cen));
}

5.函数/运算符重载声明

//重载声明
//1.无参构造函数
//2.拷贝构造函数
//3.类型转换构造函数
//4.析构函数
//5.默认赋值运算符=
//6.++ --
//7.+=
//8.下标运算符a[1]='X' a[1]=6
//9.+ a+b=c
//10.类型转换函数
//11.输出输入友元
#include<iostream>
using namespace std;class Bar {friend Bar& operator<<(iostream& ios, const Bar&);friend Bar& operator>>(ifstream& ifs, Bar&);
public:Bar();Bar(const Bar& other);Bar(const string& other);~Bar();Bar& operator=(const Bar& other);Bar& operator++();Bar operator--(int);//后置intchar& operator[](int);Bar operator+(const Bar& other);operator string();//static_cast//dynamic_cast
};

6.复数类

//#include<iostream>
#include<iostream>
#include<algorithm>
using namespace std;//复数类
class Complex {friend ostream& operator<<(ostream& o, const Complex& other);friend Complex operator+(const Complex& A, const Complex& B){return Complex(A.r + B.r, A.i + B.i);}
public:Complex(int a = 0, int b = 0) :r(a), i(b) {}int& operator[](char c){if (c == 'r')return r;if (c == 'i')return i;}Complex operator++(int){Complex temp = *this;r++, i++;return temp;}explicit operator float(){return sqrt(r * r + i * i);}
private:int r, i;//int
};int main()
{Complex a, b;//a = ++b;a = b++;		// 后置++,参数列表中多一个无用的int 前置++可以有引用a = 10 + b;		// 1.自定义全局函数重载 2.C++自己定义的int相加(默认类型转换-类型转换运算符)-不能默认转换只能强制转换,显示调用a['r'] = 1, a['i'] = 2;	  // 下标运算符float f = static_cast<float>(a); //❗c++静态和动态类型转换都要考❗//float f = (float)a;
}

7.点和三角形

//点和三角形
//浮点数,列表初始化,运算符的重载#include<ostream>
#include<array>
class Point {friend class Triangle;//声明友元类❗//输出运算符的重载friend ostream& operator<<(ostream& o, const Point& p)//❗{o << "[" << p. x << "," << p.y <<"]";return o;//考❗}public:Point(int xx,int yy):x(xx),y(yy){} //构造函数列表初始化❗~Point();//析构函数//计算两点距离float GetDistance(const Point& other) {return sqrt((x - other.x) * (x - other.x) + (y - other.y) * ((y - other.y)));}//+重载 两点相加没有& ❗Point operator+ (const Point& other) {return Point(x + other.x, y + other.y);}private:int x, y;//float};class Triangle {//输出运算符的重载friend ostream& operator<<(ostream& o, const Triangle& t){o << "[" << t.all[0] << "," << t.all[1] << ","<<t.all[2]<<"}";return o;//考❗}public://三个点-用数组元素 去列表初始化❗Triangle(const Point& p1, const Point& p2, const Point& p3) :all{p1, p2, p3}{}  //构造函数-列表初始化//三个边-根据三个点初始化❗Triangle(float a, float b, float c) :all{ Point{ 0,0 }, Point{ a,0 }, Point{ 0,0 } } {all[2].x = ........;all[2].y = ........;}//计算面积float GetArea() {//变长float a = all[0].GetDistance(all[1]);❗float b = all[1].GetDistance(all[2]);float c = all[2].GetDistance(all[0]);float p = (a + b + c) / 2.0f;return sqrt(....);}//Triangle t;// t[0]=Point{1,2};//下标运算符重载❗Point& operator[](int index) { return all[index]; }private://表示定义了一个名为 all 的数组,该数组存储了3个 Point 类型的元素。array<Point, 3> all; //考<>❗
};

总结

1月5号复习,明天考试今天再敲遍代码。老徐一切顺利!
//单例模式#include<iostream>
using namespace std;
class Foo {
public:void SetName(string str) { name = str; }string GetName() { return name; }static Foo* GetInstance() //❗类外实现不必加static{if (_instance == nullptr){_instance = new Foo;}return _instance;}
private:Foo() {};//❗私有构造函数static Foo* _instance;string name;
};Foo* Foo::_instance = nullptr;void Fun()
{Foo* pd = Foo::GetInstance();pd->SetName("Alice");
}int main()
{Foo* pf = Foo::GetInstance();//❗调用必须加上::pf->SetName("Bob");Fun();cout << pf->GetName() << endl;
}//RTTI
//人:男生和女生
//吃饭
//体育课-打篮球和跳绳
//玩游戏和逛街
#include<iostream>
#include<list>
#include<fstream>
using namespace std;class Person {
public:Person(string str):name(str){}virtual ~Person(){}void Eat() { cout << "吃饭" << endl; }virtual void PE() = 0;
protected:string name;
};class Boy:public Person //❗继承是:符号
{
public:Boy(string str):Person(str){}~Boy(){}void PE() { cout << "打篮球" << endl; }void Game() { cout << "打游戏" << endl; }
};class Girl :public Person
{
public:Girl(string str):Person(str){}~Girl() {};void PE() { cout << "跳绳" << endl; }void Shopping() { cout << "购物" << endl; }
};
ifstream& operator>>(ifstream& ifs, list<Person*>& li)//❗
{string type, name;ifs >> type >> name;if (type == "男生"){li.push_back(new Boy(name));//❗}if (type == "女生"){li.push_back(new Girl(name));}return ifs;
}
int main()
{list<Person*> li;ifstream ifs("data.txt", ios::in);//:: ❗while (!ifs.eof()){ifs >> li;}ifs.close();for (Person* p : li){p->Eat();p->PE();if (typeid(*p) == typeid(Boy))//*p❗{Boy* pb = dynamic_cast<Boy*>(p);pb->Game();}if (typeid(*p) == typeid(Girl)){Girl* pg = dynamic_cast<Girl*>(p);pg->Shopping();}}for (Person* pt : li){delete pt;}
}//无效迭代器-删除小于平均数的元素
#include<iostream>
#include<list>
#include<vector>
#include<algorithm>
#include<numeric>using namespace std;
int main()
{vector<int> vc;generate_n(back_inserter(vc), 10, []() {return rand() % 100; });copy(vc.begin(), vc.end(), ostream_iterator<int>(cout, " "));float ave = static_cast<float>(accumulate(vc.begin(), vc.end(), 0) )/ vc.size();//vector<int>::iterator itrfor (auto itr = vc.begin(); itr != vc.end(); ){if (*itr < ave){itr = vc.erase(itr);}else{itr++;}}}//排序
#include<iostream>
#include<vector>
#include<algorithm>
#include<numeric>
using namespace std;
bool cop1(float f1, float f2)
{return (int)f1 % 10 > (int)f2 % 10;
}class cop2 {
public:cop2(int cen):center(cen){}bool operator()(float f1, float f2)//❗{return (abs(f1 - center)) > (abs(f2 - center));}
private:int center;
};int main()
{vector<float> vc;sort(vc.begin(), vc.end());//升序sort(vc.begin(), vc.end(), greater<float>());//❗sort(vc.begin(), vc.end(), cop1);int cen = 99;sort(vc.begin(), vc.end(), [cen](float f1, float f2) {return (abs(f1 - cen)) > (abs(f1 - cen)); });sort(vc.begin(), vc.end(), cop2(cen));}//复数类+ 后置++无&
//const 拷贝/类型转换/输出
#include<iostream>
using namespace std;
class Complex {friend ifstream& operator>>(ifstream& ifs, Complex& other);friend ostream& operator<<(ostream& o, const Complex& other);friend Complex operator+(const Complex& c1, const Complex& c2)//+= +{return Complex(c1.i + c2.i, c1.r + c2.r);}
public:Complex(){}~Complex(){}Complex(const Complex& other){}Complex(const string other){}Complex& operator=(const Complex& other){}Complex(int a,int b):r(a),i(b){}Complex operator++(int){Complex temp = *this;i++, r++;return temp;}Complex& operator++(){i++, r++;return *this;}int& operator[](char c){if (c == 'r'){return r;}if (c == 'i'){return i;}}explicit operator float(){return sqrt(r * r + i * i);}
private:int r, i;
};int main()
{Complex a,b;a = b++;a = ++b;a['r'] = 1;a['i'] = 2;a = a + b;float f = static_cast<float>(a);float f = (float)a;//cout << a << b << endl;//cin>>a>>breturn 0;
}
static_cast<>()
dynamic_cast<>()
greater<>()
typeid()
[]() {}
copy---ostream_iterator<>()
accumulate(, , 0)
generate_n
back_inserter(vc)//往谁里面插入
vector<>::iterator itr 
auto itr=li.begin()
explicit
cosnt & operator

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LLM-Agent】Building effective agents和典型workflows

note Anthropic的工程经验&#xff1a; 大道至简&#xff0c;尽量维护系统的简洁&#xff1b;尽量让过程更加透明&#xff08;因为你依赖的是LLM的决策&#xff0c;如果只看输出不看过程&#xff0c;很容易陷入难以debug的情况&#xff09;&#xff1b;对LLM需要调用的工具&am…

音视频入门基础:MPEG2-PS专题(4)——FFmpeg源码中,判断某文件是否为PS文件的实现

一、引言 通过FFmpeg命令&#xff1a; ./ffmpeg -i XXX.ps 可以判断出某个文件是否为PS文件&#xff1a; 所以FFmpeg是怎样判断出某个文件是否为PS文件呢&#xff1f;它内部其实是通过mpegps_probe函数来判断的。从《FFmpeg源码&#xff1a;av_probe_input_format3函数和AVI…

CSS——5. 外部样式

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>方法3&#xff1a;外部样式</title><link rel"stylesheet" href"a.css" /><link rel"stylesheet" href"b.css"/&g…

lenovo联想IdeaPad 15sIML 2020款(81WB)笔记本电脑原装出厂OEM预装系统Windows10镜像下载

适用机型 &#xff1a;【81WB】 链接&#xff1a;https://pan.baidu.com/s/1SF9uWaNdCKPkwKgsCWb18g?pwdh6qe 提取码&#xff1a;h6qe 联想原厂WIN系统自带所有驱动、带Recovery恢复重置、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想…

WPS表格技巧01-项目管理中的基本功能-计划和每日记录的对应

前言&#xff1a; 在项目管理中&#xff0c;一般就是用些项目管理工具来管理这个任务和 task&#xff0c;但是就是要学这些工具很麻烦&#xff0c;比较好的方法&#xff0c;通用的方法就是用 Excel 表格去做&#xff08;这非常适合松散的团队组织&#xff09;&#xff0c;然后…

《前端web开发-CSS3基础-1》

文章目录 《前端web开发-CSS3基础》1.CSS引入方式2.选择器-标签和类3.选择器-id和通配符选择器4.画盒子5.字体修饰属性6.字体大小、粗细和倾斜6.1字体大小6.2 字体粗细6.3字体倾斜 7.行高8.字体族9.font复合属性10.缩进、对齐和修饰线10.1 文本缩进10.2 文本和图片对齐10.3 文本…

Mac M2基于MySQL 8.4.3搭建(伪)主从集群

前置准备工作 安装MySQL 8.4.3 参考博主之前的文档&#xff0c;在本地Mac安装好MySQL&#xff1a;Mac M2 Pro安装MySQL 8.4.3安装目录&#xff1a;/usr/local/mysql&#xff0c;安装好的MySQL都处于运行状态&#xff0c;需要先停止MySQL服务最快的方式&#xff1a;系统设置 …

网络IP协议

IP&#xff08;Internet Protocol&#xff0c;网际协议&#xff09;是TCP/IP协议族中重要的协议&#xff0c;主要负责将数据包发送给目标主机。IP相当于OSI&#xff08;图1&#xff09;的第三层网络层。网络层的主要作用是失陷终端节点之间的通信。这种终端节点之间的通信也叫点…

密钥管理系统在数据安全解决方案中的重要性

密钥管理系统在数据安全解决方案中占据着举足轻重的地位&#xff0c;其重要性体现在以下几个方面&#xff1a;一、保障数据机密性 密钥管理系统通过生成、存储和管理加密密钥&#xff0c;确保了数据的机密性。这些密钥用于加密和解密数据&#xff0c;只有授权用户才能访问和使…

关于PINN进一步的探讨

pinn 是有监督、无监督、半监督&#xff1f; PINN&#xff08;Physics-Informed Neural Networks&#xff0c;物理信息神经网络&#xff09;通常被归类为一种有监督学习的方法。在PINN中&#xff0c;神经网络的训练过程不仅依赖于数据点&#xff08;例如实验观测数据&#xff0…

设计形成从业务特点到设计模式的关联

规范和指引在应用架构、数据架构等各架构方向上形成规范性约束指导。同一个决策要点、架构单元在统一的架构原则指导下&#xff0c;会因业务特点差异有不同的实现&#xff0c;经过总结形成了最佳实践。在开展新应用的设计时&#xff0c;根据决策要点以及相关的业务特点&#xf…

Framebuffer 驱动

实验环境: 正点原子alpha 开发板 调试自己编写的framebuffer 驱动,加载到内核之后,显示出小企鹅 1. Framebufer 总体框架 fbmem.c 作为Framebuffer的核心层,向上提供app使用的接口,向下屏蔽了底层各种硬件的差异; 准确来说fbmem.c 就是一个字符设备驱动框架的程序,对…

STM32第十一课:STM32-基于标准库的42步进电机的简单IO控制(附电机教程,看到即赚到)

一&#xff1a;步进电机简介 步进电机又称为脉冲电机&#xff0c;简而言之&#xff0c;就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩&#xff0c;步进电机的角位移量与输入的脉冲个数严格成正…

WPS-JS宏快速上手

WPS JS宏注意事项 代码后面可以不写分号“ ; ”&#xff1b; 缩进对程序的运行影响不大&#xff0c;但为了易读&#xff08;防止自己以后看不懂&#xff09;&#xff0c;还是乖乖写好&#xff1b; 代码是逐行运行的&#xff0c;意味着下面一行代码错了&#xff0c;前面的代码…

Conda 安装 Jupyter Notebook

文章目录 1. 安装 Conda下载与安装步骤&#xff1a; 2. 创建虚拟环境3. 安装 Jupyter Notebook4. 启动 Jupyter Notebook5. 安装扩展功能&#xff08;可选&#xff09;6. 更新与维护7. 总结 Jupyter Notebook 是一款非常流行的交互式开发工具&#xff0c;尤其适合数据科学、机器…

【CVPR 2024】【遥感目标检测】Poly Kernel Inception Network for Remote Sensing Detection

0.论文摘要 摘要 遥感图像&#xff08;RSIs&#xff09;中的目标检测经常面临几个日益增加的挑战&#xff0c;包括目标尺度的巨大变化和不同范围的背景。现有方法试图通过大核卷积或扩张卷积来扩展主干的空间感受野来解决这些挑战。然而&#xff0c;前者通常会引入相当大的背…

C++语言编程————C++的输入与输出

1.面向过程的程序设计和算法 在面向过程的程序设计中&#xff0c;程序设计者必须指定计算机执行的具体步骤&#xff0c;程序设计者不仅要考虑程序要“做什么”&#xff0c;还要解决“怎么做”的问题&#xff0c;根据程序要“做什么”的要求&#xff0c;写出一个个语句&#xff…

Fabric链码部署测试

参考链接&#xff1a;运行 Fabric 应用程序 — Hyperledger Fabric Docs 主文档 (hyperledger-fabric.readthedocs.io) &#xff08;2&#xff09;fabric2.4.3部署运行自己的链码 - 知乎 (zhihu.com) Fabric2.0测试网络部署链码 - 辉哥哥~ - 博客园 (cnblogs.com) 1.启动测试…

《米塔》为什么能突破160万销量?

1、跟完蛋美女有一定的类似之处&#xff0c;都是针对用户需求打造的商品&#xff0c;所以取得良好的销量不意外。 偏宅的玩家有陪伴、被重视、被爱的需求&#xff0c; 而厂商很懂&#xff0c;无论真人还是二次元都只是手段。 完蛋也是突破百万销量&#xff0c;成为黑马。 2、…

ESP32自动下载电路分享

下面是一个ESP32系列或者ESP8266等电路的一个自动下载电路 在ESP32等模块需要烧写程序的时候&#xff0c;需要通过将EN引脚更改为低电平并将IO0引脚设置为低电平来切换到烧写模式。 有时候也会采用先将IO接到一个按键上&#xff0c;按住按键拉低IO0的同时重新上电的方式进入烧写…