C/C++ 运算符重载

before|正文之前:

c++实验代码及学习笔记(七)

你好! 这是一个高程实验课的代码记录及学习笔记。我将记录一些重要的知识点、易错点。但是作为大学生,水平很低,敬请指点教导、优化代码。

1问题

问题描述
我们本节课详细讲解了运算符重载,这次的题目就是对知识的一次简单应用。关于题目,我们无需讲解,只需要再提炼一下运算符重载的精华。

2精讲

有一篇文章写得相当好:C++_运算符重载 总结
阅读那篇文章足矣。是什么,为什么不讲,只讲怎么做。

  1. 运算符重载的方式
类的成员函数友元函数
建议 一元运算符建议 二元运算符
运算符需要改变类对象的状态有数和对象混合运算
= ( ) [ ] ->二元,第一个操作符非对象 如<<
  1. 运算符重载的规则
    可以重载、不能重载的运算符
可以重载不可重载
单目++ – -(取负)*(指针)~ ! &
双目+ - * / % > < >> <<(移位)
其他[] () ->. .*(类指针)::(作用域)sizeof :?(条件运算)
  1. 参数和返回值
    当参数不会被改变,一般使用const传递
    返回值看返回的是=左还是=右。一般右值可以返回const

  2. 其他
    a++(函数返回temp)/++a(函数返回*this)
    重载()、<< >> 等(见参考文章)
    类型转换函数

3代码实现

#include<iostream>

using namespace std;

class vec3
{
private:
	double _x, _y, _z;
public:
	vec3()
	{}
	vec3(double a,double b,double c):_x(a),_y(b),_z(c)
	{}
	~vec3()
	{}

	void set(double a, double b, double c)
	{
		_x = a;
		_y = b;
		_z = c;
	}
	
	void print() const
	{
		cout << "(" << _x << "," << _y << "," << _z <<")"<< endl;
	}

	bool equal(const vec3 &v)
	{
		if ((_x == v._x) && (_y == v._y) && (_z == v._z))
		{
			return true;
		}
		return false;
	}

	vec3 operator+(const vec3 &v)const
	{
		vec3 v1;
		v1._x = _x + v._x;
		v1._y = _y + v._y;
		v1._z = _z + v._z;

		return v1;
	}

	vec3 operator-(const vec3 &v)const
	{
		vec3 v1;
		v1._x = _x - v._x;
		v1._y = _y - v._y;
		v1._z = _z - v._z;
		return v1;
	}

	vec3 operator*(const vec3 &v)const
	{
		return(vec3(_x*v._x, _y*v._y, _z*v._z));
	}

	vec3 operator/(const vec3 & v)const
	{
		return(vec3(_x / v._x, _y / v._y, _z / v._z));
	}

	vec3& operator++()
	{
		*this = *this + vec3(1, 1, 1);
		return *this;
	}

	vec3& operator+=(const vec3 &v)
	{
		*this = *this + v;
		return *this;
	}

	friend bool operator==(const vec3&v1, const vec3&v2)
	{
		return v1._x == v2._x&&v1._y == v2._y&&v1._z == v2._z;
	}

	friend ostream& operator<<(ostream &os, const vec3&v)
	{
		os<< "(" << v._x << "," << v._y << "," << v._z <<")"<< endl;
		return os;
	}
};

int main()
{
	vec3 v(1, 1, 1);
	vec3 v1(-1, -1, 0);

	v = v * v1;
	cout << v ;

	cout << bool(v == v1);

	getchar();
	return 0;
}

4最终效果

最终结果
本次课程内容相对简单,重要的是练习与应用。如何将运算符重载发挥出它最大的作用,综合运用看似简单实则复杂的知识,将是有待进一步研究的问题。
感谢大家阅读,鞠躬下台!

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值