栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2022.6.15 C++——运算符的重载(+)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022.6.15 C++——运算符的重载(+)

运算符的重载
  • 1. 简单加法函数实现类对象加法
  • 2.改进简单加法函数实现类对象加法
  • 3. 运算符的重载
    • 运算符的重载总结

1. 简单加法函数实现类对象加法

示例:

class Complex
{
private:
	int Real;
	int Image;
public:
	Complex() :Real{ 0 }, Image{ 0 }
	{
		cout << "Create Complex" << this << endl;
	}
	Complex(int r, int i) :Real{ r }, Image{ i }
	{
		cout << "Create Complex(int int)" << this << endl;
	}
	Complex(const Complex& com) :Real(com.Real), Image(com.Image)
	{
		cout << "Copy Create Complex(const Complex&)" << this << endl;
	}
	~Complex()
	{
		cout << "Destroy Complex" << this << endl;
	}
	void Print() const
	{
		cout << "Real= " << Real << " Image= " << Image << endl;
	}
	Complex Add(Complex com)
	{
	    int r = this->Real + com.Real;
	    int i = this->Image + com.Image;
		Complex tmp(r, i);
		return tmp;
	}
};
int main()
{
	Complex ca(1, 2);
	Complex cb(3, 4);
	Complex cc;
	ca.Print();
	cb.Print();
	cc.Print();
    cc = ca.Add(cb);
	cc.Print();
	return 0;
}

运行结果:

结果分析:
程序运行时,先进入主函数,执行Complex ca(1, 2);和Complex ca(3, 4);调用带参数的构造函数,执行Complex cc;调用缺省的构造函数,然后依次打印出值;但是在执行cc = ca.Add(cb);时,首先调用拷贝构造函数,然后在调用带参构造函数,然后再调用拷贝构造函数将其产生的值给cc,在这块会产生一个将亡值,因此,在这中间会调用三次析构函数,最后将值打印出来;最后三次调用析构函数是对Complex ca(1, 2);Complex cb(3, 4);和Complex cc;进行析构。

2.改进简单加法函数实现类对象加法

将类中的Add函数进行修改,在我们执行这个函数时,可以少调用一次系统中的内存,这样也简化了程序的复杂度,如将Add改为:

Complex Add(const Complex &com) const 
	{
		int r = this->Real + com.Real;
		int i = this->Image + com.Image;
		return Complex(r, i);
	}

运行结果:

上述程序执行后,执行cc = ca.Add(cb);产生如下结果

从这两个结果可以看出,改进后的Add函数在栈桢中申请内存的次数减少了,这就大大优化了程序。

3. 运算符的重载

在C++中,构造operator+去实现上面示例中类对象的加法,这也就是运算符的重载。
示例:

class Complex
{
private:
	int Real;
	int Image;
public:
	Complex() :Real{ 0 }, Image{ 0 }
	{
		cout << "Create Complex" << this << endl;
	}
	Complex(int r, int i) :Real{ r }, Image{ i }
	{
		cout << "Create Complex(int int)" << this << endl;
	}
	Complex(const Complex& com) :Real(com.Real), Image(com.Image)
	{
		cout << "Copy Create Complex(const Complex&)" << this << endl;
	}
	~Complex()
	{
		cout << "Destroy Complex" << this << endl;
	}
	void Print() const
	{
		cout << "Real= " << Real << " Image= " << Image << endl;
	}
	Complex operator+(const Complex& com) const
	{
		int r = this->Real + com.Real;
		int i = this->Image + com.Image;
		return Complex(r, i);
	}
};
int main()
{
	Complex ca(1, 2);
	Complex cb(3, 4);
	Complex cc;
	ca.Print();
	cb.Print();
	cc.Print();
    
	cc = ca + cb;//类中有运算符重载,主函数中两个类对象进行加法时,直接可以相加
	cc.Print();
	cc = ca.operator+(cb);//注意
	cc.Print();

	return 0;

	
}

主要改的代码为:

运行的结果:

运算符的重载总结

运算符的重载实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该重载的运算符时调用此函数,这个函数叫做运算符重载函数,通常为类的成员函数。
定义运算符重载函数的一般格式:
类名 operator 重载的运算符(参数表){…}
如:Complex operator+(const Complex& com)
其中Complex为类名,重载运算符是+,const Complex& com为参数表。
operator是关键字,它与重载的运算符一起构成函数名,因函数名的特殊性,C++编译器可以将这类函数识别出来。
运算符的重载函数的函数名必须为关键字operator 加一个合法的运算符,在调用该函数时,将右操作数作为函数的实参。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977205.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号