IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> C++第六节课作业 -> 正文阅读

[开发工具]C++第六节课作业

?1.运算符重载:

? ? 赋予运算符有操作自定义类型数据的功能

? ? 运算符重载的本质就是函数调用?

? ? 函数返回值由运算之后的值进行决定

? ??函数名 ? ?: operator 加上重载运算符组成函数名 如operator+,operator-?

? ? 具体参数个数为需要重载函数的形式

#include<iostream>
#include<string>

using namespace std;
class Fox 
{
public:
      Fox(string name="", int age = 0) : name(name), age(age) {}//构造函数
	  void printf()
	  {
		  cout << name << "\t" << age << endl;
	  }
	   bool operator>(Fox fox)  //重载大于号
	  {
		  if (this->age>fox.age)
		  {

			return true;
		  }
		  else
		  {
			  return false;
	      }
	  
	  }
	   friend Fox operator+(Fox fox1, Fox fox2);//友元函数的声明
	   
protected:
	string name;
	int age;

};
Fox operator+(Fox fox1, Fox fox2)//友元重载+号的实现
{
	return Fox(fox1.name + fox2.name, fox1.age + fox2.age);
}
int main() 
{
	
	Fox yueyue("月", 18);
	Fox yueyue2("月2", 13);
	Fox yueyue3;
	if (yueyue>yueyue2)
	{
		cout << "yueyue大" << endl;
	}
	else
	{
		cout << "yueyue不大" << endl;
	}
	yueyue3 = yueyue + yueyue2;
	yueyue3.printf();
	while (1);
	return 0;
}

? ? 2.特殊运算符重载?

? ? cin类型 istream类对象

? ? cout类型 ostream类对象

? ? 流运算符 << >>?

? ?其他运算符
? ? = () -> [] 只能采用类的成员函数形式重载
? ?流重载采用友元方式

? ?. ?.* ??: ? :: 运算符不能重载

#include<iostream>
#include<string>

using namespace std;
class Fox 
{
public:
      Fox(string name="", int age = 0) : name(name), age(age) {}//构造函数
	  void printf()
	  {
		  cout << name << "\t" << age << endl;
	  }

	   friend istream& operator>>(istream& in, Fox& fox);//友元函数的声明
	   friend ostream& operator<<(ostream& out, Fox& fox);//友元函数的声明
	   
protected:
	string name;
	int age;

};
istream& operator>>(istream& in,Fox& fox)//因为要修改数据类型所以传引用
{
	in >> fox.name >> fox.age;
	return in;//为了能做连续输入的操作 返回 in
}
ostream& operator<<(ostream& out, Fox& fox)
{
	out << fox.name << "\t" << fox.age;
	return out;//为了能做连续的输出 所以返回 ostream 流
}
int main() 
{
	Fox fox1;
	Fox fox2;
	cin >> fox1 >> fox2;
	cout << fox1 << fox2;
	while (1);
	return 0;
}

? ?++ -- 运算符重载。

? 在重载函数中填入无用的int 型参数? 代表该为后置加加

#include<iostream>
#include<string>

using namespace std;
class Fox 
{
public:
      Fox(string name="", int age = 0) : name(name), age(age) {}//构造函数
	  void printf()
	  {
		  cout << name << "\t" << age << endl;
	  }

	   friend istream& operator>>(istream& in, Fox& fox);//友元函数的声明
	   friend ostream& operator<<(ostream& out, Fox& fox);//友元函数的声明
	   Fox operator++(int)//带表该为后置加加
	   {

		   return Fox(name,age++);
	   }
	   Fox operator++()//带表该为前置加加
	   {

		   return Fox(name, ++age);
	   }

protected:
	string name;
	int age;

};
istream& operator>>(istream& in,Fox& fox)//因为要修改数据类型所以传引用
{
	in >> fox.name >> fox.age;
	return in;//为了能做连续输入的操作 返回 in
}
ostream& operator<<(ostream& out, Fox& fox)
{
	out << fox.name << "\t" << fox.age;
	return out;//为了能做连续的输出 所以返回 ostream 流
}
int main() 
{
	Fox fox1;
	Fox fox2;
	Fox fox3;
	Fox fox4;
	cin >> fox1 >> fox2;
	cout << fox1 << fox2;
	fox3 = fox2++;
	cout << fox3;
	fox4=++fox1;
	cout << fox4;
	while (1);
	return 0;
}

? ?文本重载 语法是 unsigned long long ?operator""

? ?例子

#include<iostream>
#include<string>
using namespace std;
unsigned long long operator""_day(unsigned long long num)
{
	return 24 * num;
}

int main() 
{

	int num = 1_day;//算出一个值 返回给变量


	return 0;
}

综合:

#include<iostream>
#include<string>
using namespace std;
class Double
{
public:
	Double(double num = 0.0) :num(num) {}//构造函数
	double& data() //修改这个类中数据成员提供的接口
	{
		return num;
	}
	friend  istream& operator>>(istream&in, Double& Vdouble);
	friend  ostream& operator<<(ostream&out, Double& Vdouble);
	Double operator+(const Double& num2)//加入const 是为了常量相加
	{
		return Double(this->num + num2.num);//通过类去做重载 
	}
	friend Double operator-(const Double& num1, const Double& num2)
	{
		return Double(num1.num - num2.num);
	}
	Double operator+=(const Double& num1) //我们的数据类型相加
	{
		return Double(this->num + num1.num);
	}
	Double operator+=(const double& num1) //和默认的类型数据相加
	{
		return Double(this->num + num1);
	}
	Double operator++(int) //后置加加
	{
		return Double(this->num++);
	}
	Double operator++()//前置加加
	{
		return Double(++(this->num));
	}
    int * operator&() //放回一个地址
	{
		return (int*)(&this->num);
	}

	Double operator-() 
	{
		return(-this->num);
	}
protected:

	double num;
};
 istream& operator>>(istream& in, Double& Vdouble)
{
	 in >> Vdouble.num;
	 return in;
}//流重载
 ostream& operator<<(ostream& out, Double& Vdouble)
 {
	 out << Vdouble.num;
	 return out;
 }

int main()
{

	Double arr1(1.1);//1.1
	Double arr2 = 2.1;//2.1
	Double arr3;//0.0
	Double arr=1.5;//1.5
	arr3 = arr1 - arr;//arr3=1.1-1.5
	cout << arr3 << arr1 << arr;
	cin >> arr1;
	cout << arr1;
	arr2 = ++arr;//arr2=2.5
	cout << arr2;//2.5
	cout << arr;//arr=2.5
	cout << &arr << endl;
	arr = -arr;
	cout << arr;//-2.5

	while (1);
	return 0;
}

[]运算符重载

#include<iostream>
using namespace std;

class Array
{
public:

	Array(int size)
	{
		arraybest = new int(size);
	}
	~Array()
	{
		delete[] arraybest;
	}
	int& operator[](int i)//重载中括号
	{
		return arraybest[i];
	}
	

protected:

	int* arraybest;

};
int main() 
{

	while (1);
	return 0;
}

作业:

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 10:06:52  更:2021-11-27 10:07:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:30:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码