概述
目录
一、运算符重载的概念
二、成员函数重载
三、友元函数重载
四、 特殊符号型的重载
-- << >> 输入和输出流一般作为友元重载,不能作为成员函数重载
五 “this指针”在重载中的有无和对不同类型重载的限制
一、运算符重载的概念
1、是什么
运算符重载指的是重载系统内部的运算符函数,是实现类静态多态性的方式之一。它本质上是函数重载。
2、为什么
我们平常常见的算术运算符、逻辑运算符等运算符都是系统库函数里面已经存在的,所以运算符可以直接用于我们常用的数据类型。然而对于我们自定义的类实例化的对象,系统没有与之相关的运算符可以操作,但是为了使我们编写程序时更加便捷,C++提供了一种方式——运算符重载,来满足我们对于类对象进行的操作。
3、运算符重载的实现方式
①类成员函数:public、private、protected任意访问权限都可。
②友元函数:同上。
③普通函数
4、运算符重载的注意事项
/*
①运算符相关:运算符重载不改变运算符的优先级和结合性。
运算符重载还分为 可重载的运算符 和 不可重载的运算符 。大多数运算符都是可重载的运算符。除了以下5个不可重载。
分别是“.”、“.*”、“::”、“?:”、“sizeof()”。
②运算符重载的形式:operator运算符。如Test& operaor+(Test &obj);
③运算符重载的本质:函数重载。
//以下所指的函数重载==运算符重载
④函数重载结构和操作数(形参)的个数不会发生变化。但是如果是重载在类成员函数中,形参表中的个数-1,形参中的类对象转化为左操作数。
⑤运算符重载的操作数一定要有一个自定义类型,否则失去了重载的意义。
⑦函数重载的返回值类型由主函数中接收返回值的对象类型确定。//关于对象的概念,请参考另一篇博客。
*/
二、成员函数重载
语法:
class Test{
public:
void operator+(Test a)
{
/*注意事项:
1、成员函数重载的意思是,运算符函数重载一定要在类里面声明,可以类外定义。
2、注意成员运算符函数重载形参操作数-1。
3、关于成员函数重载调用的问题:
Test a,b;
Test c=a+b;//①
c=a.operator+(b)//②
这两种方式本质上没有什么区别,只是第一种在使用运算符的时候将关键字operator省略掉了,这样在我们写代码的时候会更加方便一些。
*/
}
};
三、友元函数重载
语法:
class Test{
public:
Test(int newx=0){x=newx;}
friend Test operator+(Test a,Test b);
private://友元函数在类中声明,在类外定义。
int x;/*如果成员函数也是在类中声明,类外定义,那么两者之间只差了操作数的区别,但是有一些运算符只能在类里面声明,也就是只能作为类成员函数。*/
};
Test operator+(Test a,Test b)
{
Test c;
c.x=a.x+b.x;
return c;
}
四、 特殊符号型的重载
-- << >> 输入和输出流一般作为友元重载,不能作为成员函数重载
//输入输出流作为类的友元函数
class Test {
public:
friend ostream& operator<<(ostream& out, Test& obj);//作为类的友元函数,便于在重载函数在函数体内访问私有数据成员
Test(int newx = 0) { x = newx; }
private:
int x;
};
ostream& operator<<(ostream& out,Test &obj)
{
out <<obj.x;
return out;
}
int main() {
int x, y;
cin >> x >> y;
Test varOne(x), varTwo(y);
cout << varOne << endl;/*当输入输出流重载函数作为友元函数时,使用的时候跟我们平常使用基本上一致,没事很大的差别,除了有加operator和不加operator的形式上的差别之外,功能实现上无差别*/
cout<<varTwo<<endl;
return 0;
}
五 “this指针”在重载中的有无和对不同类型重载的限制
前面提到运算符重载有三种实现方式,然而这三种实现方式中, 只有成员函数有this指针。
对于一些有且只能以类成员函数重载的运算符,就是因为其运算符函数在执行过程中需要用到this指针。
最后
以上就是昏睡鸵鸟为你收集整理的C++运算符重载一、运算符重载的概念 二、成员函数重载三、友元函数重载的全部内容,希望文章能够帮你解决C++运算符重载一、运算符重载的概念 二、成员函数重载三、友元函数重载所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复