C++基础学习笔记:运算符重载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gongjianbo1992/article/details/77929401

(运算符重载和类转换的练习代码)

头文件:

//MyClass.h
#pragma once
#include <iostream>
//设计一个简单的类来熟悉运算符重载与类的转换
class MyClass
{
private:
	int num;//私有成员变量
public:
	//构造函数:对象的初始化操作
	//只接受一个参数的构造定义了参数类型到类类型的转换,
	//默认为隐式转换,通过explicit关键字限制为显式转换。
	explicit MyClass(int n=0);
	//拷贝构造:形如MyClass a(b),其中b是一个MyClass类型
	MyClass(MyClass &myc);
	//赋值运算符:只能为成员函数,对象之间的赋值操作
	MyClass &operator=(MyClass &myc);
	int Add(int n);
	int Add(MyClass &myc);
	//成员函数进行运算符重载,使用关键字operator加上一个运算符,
	//a+n如同a.operator+(n),自身通过this指针操作。
	int operator+(int n);
	//转换函数:必须是类方法、无参数与返回值。
	explicit operator int() const;
	//友元函数进行运算符重载
	friend int operator+(MyClass &a,MyClass &b);
	//输入输出流的重载,记得返回一个流引用,方便连续的输入输出操作。
	friend std::ostream & operator << (std::ostream &os, MyClass &myc);
	friend std::istream & operator >> (std::istream &is, MyClass &myc);
	//析构函数
	~MyClass();
};

类实现:

//MyClass.cpp
#include "MyClass.h"
MyClass::MyClass(int n)
{
	num = n;
}
MyClass::MyClass(MyClass &myc)
{
	num = myc.num;
}
MyClass & MyClass::operator=(MyClass &myc)
{
	if (this == &myc)
		return *this;
	num = myc.num;
	return *this;
}
int MyClass::Add(int n)
{
	num += n;
	return num;
}
int MyClass::Add(MyClass &myc)
{
	num += myc.num;
	return num;
}
int MyClass::operator+(int n)
{
	return num + n;
}
MyClass::operator int() const
{
	return num;
}
int operator+(MyClass &a, MyClass &b)
{
	return a.num + b.num;
}
std::ostream & operator << (std::ostream &os, MyClass &myc)
{
	os << myc.num;
	return os;
}
std::istream & operator >> (std::istream &is, MyClass &myc)
{
	is >> myc.num;
	return is;
}
MyClass::~MyClass()
{

}

使用:

//user.cpp
//!时间:2017年9月10日(周日)夜
//!内容:运算符重载与类的转换
//!最后更新时间:NULL
#include <iostream>
#include <cstdlib>//rand()
#include <ctime>//time()
//<>和""表示编译器在搜索头文件时的顺序不同,
//<>表示从系统目录下开始搜索,再到PATH环境变量目录,不搜索当前目录,
//""是表示从当前目录开始搜索,然后是系统目录和PATH环境变量目录。
#include "MyClass.h"
int main()
{
	using namespace std;
	/*//插曲:产生随机数
	srand((unsigned)time(nullptr));//种子默认为1
	for (int i = 0; i < 10; i++)
		cout << rand() %10<< '-' << endl;*/

	//
	MyClass a, b;
	a.Add(5);
	b = a;//赋值操作
	MyClass c(a);//拷贝构造
	a = (MyClass)2;//因为使用了explicit关键字,需要显式转换
	int i = (int)a;//因为使用了explicit关键字,需要显式转换
	i = a + b;//使用友元版本+
	i = a + 1;//使用成员版本+
	cin >> b;
	cout << i << a << b << c << endl;
	system("pause");
	return 0;
}



猜你喜欢

转载自blog.csdn.net/gongjianbo1992/article/details/77929401