引用及操作符的重载

原创 2017年07月28日 13:38:44

引用是C++的概念,属于C++编译器对C的一个扩展
引用可以看做是一个已经定义的变量的别名
语法:
Type &b = a;
引用是不能修改的,所以在声明时必须初始化。并且其还占有内存空间。可以简单的理解type * const name
引用的原理我们不需要理解,只要把引用可以看做是一个已经定义的变量的别名

当被调用的函数当左值的时候,函数的返回值必须为引用


引用方面未完待续。


操作符的重载

重载运算符函数可以对运算符作出新的解释,但原有基本语义不变:
1)不改变运算符的优先级
2)不改变运算符的结合性
3)不改变运算符所需要的操作数 
4)不能创建新的运算符

运算符的重载常见的有两种:

1)一元运算符的重载

2) 二元运算符的重载


先来看看一元操作符的重载

社会我浩哥,人狠话不多,也不多说,直接上代码演示:

#include <iostream>
using namespace std;
/*
一元运算符的重载我们从以下方面讲解:
1 全局函数实现操作符重载
 1) 操作区前置
 2) 操作符后置
2 成员函数实现操作符重载
 1) 操作区前置
 2) 操作符后置
*/

class Student {

public :
	Student(int grade,char * name);
	~Student();
	//成员函数之前置
	Student & operator ++ ();
	int grade;
	char * name;
};

Student::Student(int grade, char * name) {
	this->grade = grade;
	this->name = name;
}
Student::~Student() {

}
//成员函数之前置的业务实现
Student & Student::operator ++ () {
	this->grade = this->grade + 1;
	return *this;
}

//全局函数之前置
//注意参数的形式是固定的没如果不折磨写的话会执行类的拷贝构造函数
//为了效率一切都是值得的,因为我们是C++;
Student & operator ++ (Student& s) {
	s.grade = s.grade + 1;
	return s;
}
void main() {
	Student s(99, "魏金浩");
	//前置为先++在使用
	++s;
	cout << s.grade << s.name << endl;
	system("pause");
}
上面代码只对前置实现了,后置的原来也是如此,在这我就不老和尚念经了,太啰嗦。

下面代码演示的是双元运算符的重载:

#include <iostream>
using namespace std;
/*
双元运算符的重载有两种常见的方式
1 全局函数重载
2 成员函数重载

*/
class Student
{
public:
	Student(int grade,char * name);
	~Student();
	//实现操作符重载的成员函数
	Student operator + (Student& s2);
	int grade;
	char * name;

};

Student::Student(int grade, char * name)
{
	this->grade = grade;
	this->name = name;
}

Student::~Student()
{
}

Student Student::operator + (Student& s2) {
	Student s3(this->grade +s2.grade,"new");
	return s3;
}

//实现操作符重载的全局函数
Student operator + (Student& s1, Student& s2) {
	Student s(s1.grade + s2.grade, "new");
	return s;
}


void main() {
	Student s1(96, "魏金浩"), s2(33, "周菲菲");
	Student s3 = s1 + s2;
	/*
	关于书写函数实现操作符重载的步骤
	1 承认操作符重载是一个函数
	2 根据操作数1 操作数2 完成函数参数
	3 根据函数原型实现需要的业务
	*/
	cout << s3.grade << s3.name << endl;
	system("pause");
	
}


好了,基本代码我们都演示清楚了,下面我们来讨论讨论运算符的重载有什么现实意义了:


在讲现实意义前你有必要复习一下我们的上一篇文章,类的构造,拷贝构造,析构一章。


未完待续!!~!


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

重载流操作符为什么必须用引用

http://hi.baidu.com/%C8%CE%C5%E0%BB%A8/blog/item/1d3a1cf583a97e34bc310918.html在C++中,流操作符(>>)是经常要被重载的...

好久没有写操作符重载了 自己重新写了个 温习了一下细节 温习友元 this const 引用

#include using namespace std; class Point { public: Point(int _x, int _y) : x(_x), y(_y) ...

C++ 操作符重载

  • 2013年05月30日 01:47
  • 1KB
  • 下载

操作符重载之解引用与箭头操作符

箭头操作符与众不同。它可能表现得像二元操作符一样:接受一个对象和一个成员名,对对象解引用以获取成员。不管外表如何,箭头操作符不接受显式形参。这里没有第二个形参,因为 -> 的右操作数不是表达式,相反,...

c++课件(5)操作符重载1

  • 2017年07月29日 14:02
  • 553KB
  • 下载

操作符重载

  • 2012年11月01日 13:02
  • 756B
  • 下载

友元函数与操作符重载入门+const修饰this指针

先对比一下成员函数与全局函数的区别 先对比下全局函数与普通的成员函数 #include class Test { public: //理解this指针的关键,站在测试程序的角度去思考 //什么...

重载操作符与转换.txt

  • 2015年12月23日 21:00
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:引用及操作符的重载
举报原因:
原因补充:

(最多只允许输入30个字)