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

C++操作符函数重载

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

C++操作符函数重载

C++操作符函数重载_m0_37622246的博客-CSDN博客_c++操作符重载函数rC++操作符函数重载操作符函数重载操作符函数重载操作符函数:在https://blog.csdn.net/m0_37622246/article/details/100004666

个人理解

任何时候针对非类类型的对象的运算符,要知道其背后是函数调用,编译器在中间做了一些事情,而函数调用又分该类型的成员函数调用或者全局函数调用(通常会将该全局函数声明为某类类型的friend,这样既没有破坏原有类型的封装性,同时又保证了功能上得到满足了,比如ostream cout要输出某类类型的对象,就可以定义一个全局函数作为该类类型的friend)

//struct Point{
    class Point{
    int x;
    int y;
//    ostream & operator<<(ostream& os, const Point& p) {
//        os << "memfunc x:" << p.x << " " << "y:"<< p.y << endl;
//    }
//    ostream & operator<<(ostream& os) {
//        os << "memfunc x:" << x << " " << "y:"<< y << endl;
//        return os;
//    }

    friend ostream & operator<<(ostream& os, const Point& p);
};

ostream & operator<<(ostream& os, const Point& p) {
    os << "gloal func x:" << p.x << " " << "y:"<< p.y << endl;
    return os;
}

int main() {
    Point p;
    cout << p; // cout.operator<< 或者  operator<<(cout , p)
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
友元函数
1、在类的外部某个想访问类的私有成员(public/protected/private)时,需要把所在的函数声明为友元,但友元只是朋友,没有实际的拥有权,因此它只有访问权(其根本原因是它没有this指针)。
2、友元函数的声明:把函数声明写一份到类中,在声明前加上friend关键字,使用友元既可以把操作符函数定义为全局的,也可以确保类的封装性。
注意:友元函数与成员函数不会构成重载关系,因为它们不在同一个作用域中。 关于操作符重载的建议
1、在重载操作符时,要根据操作符实际的功能和意义来确定具体参数、返回值、是否具有const属性,返回值是否是引用或者是临时对象。
2、重载操作符要合情合理(有意义),要以实际用途为前提。
3、重载操作符的意义是为了让对象的操作更简单、方便,提高代码的可读性。
4、重载操作符要与默认的操作符的功能、运算规则一致,不要出现反人类的操作。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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