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

C++运算符重载(01)

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

C++运算符重载(01)

运算符重载简介

       所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。同样运算符重载(Operator Overloading)可以让同一个运算符可以有不同的功能。

格式

C++ 规定,下标运算符[ ]必须以成员函数的形式进行重载。该重载函数在类中的声明格式如下:

返回值类型 & operator[ ] (参数);

const 返回值类型 & operator[ ] (参数) const;

使用第一种声明方式,[ ]可以访问元素,还可以修改元素。使用第二种声明方式,[ ]只能访问不能修改元素

规则

不能重载的运算符有 .  和 .* 和 ?: 和 ::  和 sizeof

友元函数和成员函数的使用场合:一般情况下,建议一元运算符使用成员函数,二元运算符使用友元函数

        1、运算符的操作需要修改类对象状态,使用成员函数。如需要做左值操作数的运算符(如=,+=,++)

        2、运算时,有数和对象的混合运算时必须使用友元

        3、二元运算符中,第一个操作数为非对象时,必须使用友元函数。如输入输出运算符<<和>>

具体规则如下:

 运算符重载的两种方法
类内重载
#include 
using namespace std;

class Point
{
public:
    Point(){};
    Point (int x, int y): x(x),y(y) {};
    Point operator+(const Point &b)
    { //类内重载,运算符重载函数作为类的成员函数
        Point ret;
        ret.x = this->x + b.x;
        ret.y = this->y + b.y;
        return ret;
    }
    int x,y;
};

int main() 
{
    Point a(2,4),b(5,3);
    Point c = a + b;      //这里c++编译器会,自动去找 + 运算符的重载函数
	cout<< "x :" << c.x << endl;
    cout<<"y :" << c.y << endl;
}

双目运算符的重载:

      重载运算符函数名:operator@(参数表)

      隐式调用形式:obj1+obj2

      显式调用形式:obj1.operator+(OBJ obj2)---成员函数

                                  operator+(OBJ obj1,OBJ obj2)---友元函数

      执行时,隐式调用形式和显式调用形式都会调用函数operator+()


类外重载(用友元函数的方法实现)
#include 
using namespace std;

class Point
{
public:
    Point(){};
    Point (int x, int y): x(x),y(y) {};
    friend Point operator+(const Point &, const Point &);   //声明类的友元函数
    int x,y;
};

Point operator+(const Point &a,const Point &b)
{//类外重载,运算符重载函数作为类的友元函数
    Point ret;
    ret.x = a.x + b.x;
    ret.y = a.y + b.y;
    return ret;
}

int main() 
{
    Point a(2,4),b(5,3);
    Point c = a + b;
	cout<< "x :" << c.x << endl;
    cout<<"y :" << c.y << endl;
}

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

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

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