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

目录

1.单例模式

2.RTTI

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

4.排序

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

6.复数类

7.点和三角形

总结


1.单例模式

#include<iostream>
using namespace std;

//单例模式
class Foo {
public:
	//类的构造析构函数(略)
	//针对name GetName-return SetName-name=str
	string GetName() { return name; }
	void SetName(string str) { name = str; }//注意!列表初始化是构造函数特有的(:),域操作符(::)

	//针对静态变量_instance-static
	static 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.遍历RTTI

class 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文件输出ifs
	ifstream 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);//后置int
	char& 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 itr
	for (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>>b
	return 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

graylog+sidecar通过docker-compose部署并采集SSH登录日志

文章目录 前言一、graylog日志系统数据流向清洗图二、资源准备及部署1.docker-compose部署2.准备docker-compose.yml文件3.安装graylog-sidecar并配置4.给sidecar创建token 三、graylog-WEB配置采集SSH日志1.配置Inputs2.创建sidecar采集器3.将页面创建好的sidecar与服务器绑定…

【Vue.js】监听器功能(EventListener)的实际应用【合集】

目录 &#x1f914;在实际开发过程中&#xff0c;我遇到了一个颇为棘手的小问题 &#x1f60b;解决这个小问题 问题出现的原因剖析 解决方法阐述 问题成功解决&#xff01;​ &#x1f4d6;相关知识总结 基本概念 使用方法 实际应用场景 &#x1f914;在实际开发过程中…

2023年区块链职业技能大赛——区块链应用技术(一)模块一

模块一:区块链产品方案设计及系统运维: 任务1-1:区块链产品需求分析与方案设计 1.依据给定区块链食品溯源系统的业务架构图&#xff0c;对考题进行业务分析&#xff0c;可能多的去考虑一个业务系统所需要的模块&#xff0c;使用Visio或思维导图工具展现本系统的基本设计概念和…

【HarmonyOS应用开发——ArkTS语言】欢迎界面(启动加载页)的实现【合集】

目录 &#x1f60b;环境配置&#xff1a;华为HarmonyOS开发者 &#x1f4fa;演示效果&#xff1a; &#x1f4d6;实验步骤及方法&#xff1a; 一、在media文件夹中添加想要使用的图片素材​ 二、在entry/src/main/ets/page目录下创建Welcome.ets文件 1. 整体结构与组件声…

Flutter Android修改应用名称、应用图片、应用启动画面

修改应用名称 打开Android Studio&#xff0c;打开对应项目的android文件。 选择app下面的manifests->AndroidManifest.xml文件&#xff0c;将android:label"bluetoothdemo2"中的bluetoothdemo2改成自己想要的名称。重新启动或者重新打包&#xff0c;应用的名称…

MES管理系统如何解决企业制造瓶颈

在当今全球化与信息化高度融合的时代&#xff0c;制造业作为支撑国家经济发展的关键产业&#xff0c;正处于发展的十字路口&#xff0c;面临着一系列严峻挑战。从日常所需的各类用品到先进的高端工业产品&#xff0c;制造业的稳定发展对经济的稳健运行至关重要&#xff0c;一旦…

Maven 详细配置:Maven settings 配置文件的详细说明

Maven settings 配置文件是 Maven 环境的重要组成部分&#xff0c;它用于定义用户特定的配置信息和全局设置&#xff0c;例如本地仓库路径、远程仓库镜像、代理服务器以及认证信息等。settings 文件分为全局配置文件&#xff08;settings.xml&#xff09;和用户配置文件&#x…

【C++】18.继承

文章目录 1.继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符1.2.3继承基类成员访问方式的变化 1.3 继承类模板 2.基类和派生类对象赋值转换3.继承中的作用域3.1 隐藏规则&#xff1a;3.2 考察继承作用域相关选择题 4.派生类的默认成员函数4…

声音是如何产生的

一、音频概述 RTMP中一般音频采用aac编码&#xff0c;采样率为44100HZ, 每帧1024采样&#xff0c;帧率43&#xff0c;23.2ms一帧 RTC中一般音频采用opus编码&#xff0c;采样率为48000HZ&#xff0c;每帧480采样&#xff0c;帧率100&#xff0c;10ms一帧 通道数&#xff08;c…

什么是中间件中间件有哪些

什么是中间件&#xff1f; 中间件&#xff08;Middleware&#xff09;是指在客户端和服务器之间的一层软件组件&#xff0c;用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件&#xff0c;它可以在两个系统之间传递、处理、转换数据&#xff0c;以达到协…

问题清除指南|关于num_classes与 BCELoss、BCEWithLogitsLoss 和 CrossEntropyLoss 的关系

前言&#xff1a;关于「 num_classes 1 」引发的探究。 2024年尾声&#xff0c;学弟问到一个问题&#xff1a;在研究工作 CNNDetection 的github开源代码 networks/trainer.py 文件的 line 27 self.model resnet50(num_classes1) 中&#xff0c;变量 num_classes 的值为1&…

FinDKG: 用于检测金融市场全球趋势的动态知识图谱与大型语言模型

“FinDKG: Dynamic Knowledge Graphs with Large Language Models for Detecting Global Trends in Financial Markets” 论文地址&#xff1a;https://arxiv.org/pdf/2407.10909 摘要 动态知识图&#xff08;DKG&#xff09;能够表示对象间随时间变化的关系&#xff0c;适用于…

Robot---奇思妙想轮足机器人

1 背景 传统机器人有足式、轮式、履带式三种移动方式&#xff0c;每种移动方式都有各自的优缺点。轮式机器人依靠车轮在地面上移动&#xff0c;能源利用率高、移动速度快&#xff0c;但是仅以轮子与地面接触&#xff0c;缺乏越障能力和对复杂地形的适应能力&#xff0c;尤其面对…

高效工作流:用Mermaid绘制你的专属流程图;如何在Vue3中导入mermaid绘制流程图

目录 高效工作流&#xff1a;用Mermaid绘制你的专属流程图 一、流程图的使用场景 1.1、流程图flowChart 1.2、使用场景 二、如何使用mermaid画出优雅的流程图 2.1、流程图添加图名 2.2、定义图类型与方向 2.3、节点形状定义 2.3.1、规定语法 2.3.2、不同节点案例 2.…

.NET框架用C#实现PDF转HTML

HTML作为一种开放标准的网页标记语言&#xff0c;具有跨平台、易于浏览和搜索引擎友好的特性&#xff0c;使得内容能够在多种设备上轻松访问并优化了在线分享与互动。通过将PDF文件转换为HTML格式&#xff0c;我们可以更方便地在浏览器中展示PDF文档内容&#xff0c;同时也更容…

Tableau数据可视化与仪表盘搭建-可视化原则及BI仪表盘搭建

目录 可视化原则 BI仪表盘搭建 仪表盘搭建原则 明确仪表盘主题 仪表盘主题拆解 开发设计工作表 经营情况总览&#xff1a;突出显示的文字 经营数据详情&#xff1a;表格 每日营收数据&#xff1a;多轴折线图 每日流量数据&#xff1a;双轴组合图 新老客占比&#xf…

AIA - APLIC之三(附APLIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 APLIC复位 APLIC复位后,其所有状态都变得有效且一致,但以下情况除外: 每个中断域的domaincfg寄存器(spec第 4.5.1 节);可能是machine-level interrupt domain的MSI地址配置寄存器(spec第4.5.3 和4.5…

unity学习5:创建一个自己的3D项目

目录 1 在unity里创建1个3D项目 1.1 关于选择universal 3d&#xff0c;built-in render pipeline的区别 1.2 创建1个universal 3d项目 2 打开3D项目 2.1 准备操作面板&#xff1a;操作界面 layout,可以随意更换 2.2 先收集资源&#xff1a;打开 window的 AssetStore 下载…

AI赋能跨境电商:魔珐科技3D数字人破解出海痛点

跨境出海进入狂飙时代&#xff0c;AI应用正在深度渗透并重塑着跨境电商产业链的每一个环节&#xff0c;迎来了发展的高光时刻。生成式AI时代的大幕拉开&#xff0c;AI工具快速迭代&#xff0c;为跨境电商行业的突破与飞跃带来了无限可能性。 由于跨境电商业务自身特性鲜明&…

我用Ai学Android Jetpack Compose之Text

这篇开始学习各种UI元素&#xff0c;答案来自 通义千问&#xff0c;通义千问没法生成图片&#xff0c;图片是我补充的。 下述代码只要复制到第一个工程&#xff0c;做一些import操作&#xff0c;一般import androidx.compose包里的东西&#xff0c;即可看到预览效果。完整工程代…