我是靠谱客的博主 昏睡鸵鸟,最近开发中收集的这篇文章主要介绍C++运算符重载一、运算符重载的概念 二、成员函数重载三、友元函数重载,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、运算符重载的概念

 二、成员函数重载

三、友元函数重载

四、 特殊符号型的重载

-- << >> 输入和输出流一般作为友元重载,不能作为成员函数重载

五 “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++运算符重载一、运算符重载的概念 二、成员函数重载三、友元函数重载所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部