当前位置: 首页 > article >正文

2024.2.7

        今天还是学习C++,今天学到了C++中的类中进行运算符的重载,仿佛打开了新世界的一个大门,原来这玩意还能这样用,以前确实是没有想到,但感觉有点复杂,明明有更加规范的写法,为什么一定要用运算符重载来进行操作呢?现在的我是难以想通的……

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>

using namespace std;


//成员函数实现运算符重载
//class person
//{
//public:
//	int a;
//	int b;
//
//	person operator*(person& p)
//	{
//		person temp;
//		temp.a = a + p.a;
//		temp.b = b + p.b;
//		return temp;
//	}
//};
//
//void test01(void)
//{
//	person p1;
//	p1.a = 10;
//	p1.b = 10;
//
//	person p2;
//	p2.a = 10;
//	p2.b = 10;
//
//	person p3 = p1 + p2;
//	cout << "p3.a=" << p3.a << " p3.b=" << p3.b << endl;
//}
//
// 本质:  p3=p1.operator+(p2);
// 
//int main()
//{
//	test01();
//	return 0;
//}

//全局函数实现运算符重载

//class person
//{
//public:
//	int a;
//	int b;
//	
//};
//
//person operator+(person p1,person p2)
//{
//	person temp;
//	temp.a = p1.a + p2.a;
//	temp.b = p2.a + p2.b;
//	return temp;
//}
//
//void test01(void)
//{
//	person p1;
//	p1.a = 10;
//	p1.b = 10;
//
//	person p2;
//	p2.a = 10;
//	p2.b = 10;
//
//	//person p3 = p1 + p2;
//	//本质
//	person p3=operator+(p1, p2);
//	cout << "p3.a=" << p3.a << " p3.b=" << p3.b << endl;
//}
//
//int main()
//{
//	test01();
//	return 0;
//}

//重载左移运算符

//class people
//{
//	friend ostream& operator<<(ostream& cout, people p);
//public:
//	people(int x, int y)
//	{
//		a = x;
//		b = y;
//
//	}
//private:
//	int a;
//	int b;
//};
//
//ostream& operator<<(ostream& cout, people p)
//{
//	cout << p.a << " " << p.b;
//	return cout;
//}
//
//void test01(void)
//{
//	people p(10, 20);
//	cout << p;
//}
//
//int main()
//{
//	test01();
//	return 0;
//}


//class people
//{
//	friend ostream& operator<<(ostream& cout, people p);
//		
//public:
//	people(int x, int y)
//	{
//		a = x;
//		b = y;
//	}
//
//private:
//	int a;
//	int b;
//};
//
//ostream& operator<<(ostream& cout, people p)
//{
//	cout << p.a << " " << p.b;
//	return cout;
//}
//
//
//void test01(void)
//{
//	people p1(10, 20);
//	cout << p1 << " zxl" << " hello world";
//}
//
//int main()
//{
//	test01();
//	return 0;
//}


//递增运算符重载

//class myint
//{
//	friend ostream& operator<<(ostream& cout, myint number);
//
//public:
//	myint(int a)
//	{
//		num = a;
//	}
//	int num;
//
//	myint& operator++()
//	{
//		num++;
//		return *this;
//	}
//	myint operator++(int)
//	{
//		myint temp = *this;
//		num++;
//		return temp;
//	}
//};
//
//ostream& operator<<(ostream& cout, myint number)
//{
//	cout <<number.num;
//	return cout;
//}
//
//
//
//void test()
//{
//	myint number(0);
//	//cout << ++(++number);
//	cout << (number)++;
//	cout << number;
//
//
//}
//
//
//int main()
//{
//	test();
//	return 0;
//}


//赋值运算符重载
//class people
//{
//public:
//	people(int a)
//	{
//		num = a;
//	}
//	int num;
//};
//
//void test()
//{
//	people p1(10);
//	people p2(20);
//	people p3(100);
//	p3 = p2;//编译器自带一种简单的赋值运算符重载,但会出现类似于深浅拷贝的重复释放内存空间的问题;
//	cout << p3.num;
//
//}
//
//
//int main()
//{
//
//	test();
//	return 0;
//}

//class people
//{
//public:
//	people(int a)
//	{
//		num = new int(a);
//	}
//
//	~people()
//	{
//		if (num != NULL)
//		{
//			delete num;
//			num = NULL;
//		}
//	}
//	int* num;
//
//	people& operator=(people &p)
//	{
//		if (num != NULL)
//		{
//			delete num;
//			num = NULL;
//		}
//		num = new int(*p.num);
//		return *this;
//	}
//};
//
//void test()
//{
//	people p1(10);
//	people p2(20);
//	people p3(100);
//	p3 = p2;
//	p2 = p1;
//	cout << *p3.num;
//	cout << *p2.num;
//}
//
//
//int main()
//{
//	test();
//	return 0;
//} 

//重载关系运算符
//class people
//{
//public:
//	people(string _name, int _height)
//	{
//		name = _name;
//		height = _height;
//	}
//	bool operator==(people p1)
//	{
//		if (name == p1.name && height == p1.height)
//		{
//			return true;
//		}
//		return false;
//	}
//	bool operator!=(people p1)
//	{
//		if (name == p1.name && height == p1.height)
//		{
//			return false;
//		}
//		return true;
//	}
//	string name;
//	int height;
//};
//
//void test()
//{
//	people p1("张三", 180);
//	people p2("张三", 180);
//	if (p1 == p2)
//	{
//		cout << "p1==p2";
//	}
//	else
//	{
//		cout << "no";
//	}
//}
//
//
//int main()
//{
//	test();
//
//	return 0;
//}


class people
{
public:
	people(int a)
	{
		name = a;
	}
	int name;
	people operator+(people p)
	{
		people temp(100);
		temp.name = name + p.name;
		return temp;
	}

	
};

ostream& operator<<(ostream& cout,people p)
{
	cout <<	p.name;
	return cout;
}

void test()
{
	people p1(10);
	people p2(20);
	people p3 = p1 + p2;
	cout << p3;
}

int main()
{
	test();
	return 0;
}

         明天继续加油!


http://www.kler.cn/a/231327.html

相关文章:

  • Ubuntu22.04安装CH343驱动并创建udev规则
  • Kotlin的data class
  • Pytest-Bdd-Playwright 系列教程(12):步骤参数 parsers参数解析
  • SSD固态硬盘删除文件基本无法恢复
  • Cesium 相机系统
  • 【Linux】基础02
  • kafka 文件存储机制
  • ComfyUI 学习笔记
  • 如何部署基于 Pyramid 的 Python WSGI Web 应用程序
  • C++ std::map 取值方式
  • 网站被攻击有什么办法呢?
  • IP数据云识别真实IP与虚假流量案例
  • 计网——运输层、端口号
  • Elasticsearch中Document Routing特性
  • Vue3.0(四):Composition API的使用
  • vue3的pinia基本用法
  • dynamic_cast运行阶段类型识别
  • vscode代码快捷键
  • React+Antd+tree实现树多选功能(选中项受控+支持模糊检索)
  • 学习总结14
  • Android修改系统默认字体
  • 开源模型应用落地-业务优化篇(四)
  • MySQL之建表操作
  • 突破编程_C++_面试(基础知识(8))
  • Vuex如何做持久化存储
  • 【数据分享】1929-2023年全球站点的逐年平均降水量(Shp\Excel\免费获取)