运算符重载

1.友元
    是对类封装的一种补充
    如果一个函数或类是另一个类的友元
    可以直接访问b的私有成员
    友元:不是成员
 两种情况:友元声明可写在类中任意位置!!
    友元函数
        一个函数是另一个类的友元可以直接访问类的私有和保护成员
            例如:
                声明写在类内部
                    friend void func();
                    //声明是我的朋友
                    

    友元类
        一个a类是一个b类型友元类
        可以随访问b的所有元素
        friend class 友元类名;*

        友元可以写在类内
            友元不是成员不受访问修饰词的影响
            即使在内部也是他的友元
            但是作用域会被限制 要先声明

            a是b的友元 不能得出b是a的友元
            友元关系不可传递 a是b b是c不能得出
            a是c的友元

2.运算符重载
    c++中有很多运算符,可直接用于基本数据类型
    和标准库中定义的数据类型但是不能直接用于
    程序员自定义类型的运算,
    为什么标准库中自定义可以用+?
    不是生来就行而是重载了加号运算符
    运算符重载的实际是函数重载!

        a+b;
            成员函数时
                等价于a.operator+(b);
            友元函数时
                等价于operator+(a,b);
                //将参数传进去 剩下的事情由你来绝定
                调用运算符会根据操作数去匹配相应的
                重载函数
3.输入输出运算符
    1).什么是输入输出运算符?
    << >>
    其实>>一开始是 左移运算符,并没有输出功能,后面c++标准库重载了它
    让其能够输出
        cout是什么?
            cout是ostream类唯一的一个对象(因为ostream类是单例模式-》只允许一个对象)
            ostream是什么?
                ostream是标准输出流的一个类,专门用于标准输出
            在ostream类中重载了很多次operator<<,使之能输出不同类型数据

            返回值都为ostream引用
                为什么?
                    为了可以连续输出。
            参数要么是  ostream的地址(重载为ostream的成员函数)
                        要蘑是ostream的引用(为友元函数),第二个参数是
                        根据输出的数据的类型const的引用
        
    2)怎么去重载?
        重载为ostream的成员函数?重载为ostream的友元函数?
        重载为友元和成员都做不了,无论那种都需要做声明但是标准库不能去修改
        那怎么办?
        (1)重载为我们自己的成员函数可以吗?
            因为成员变量的第一个参数一定是this而<<前面的参数是cout
            不能使用。
        
        (2)重载为自定义类型的友元函数!
            ostream不能加const因为可能会在文件里面进行一个写操作

            尽量不要去写换行!!***注意return语句***
            
    3)为什么要重载?目的是什么?

        为了去输出我们自定义类型,所以要重载。
    
cin与cout类似
    是istream的唯一的对象,istraem中重载了很多次>>运算符,用于输出
    第一个参数是istream& 或者 istream*

    我们自己用的话要用自定义类型的友元


4.[]运算符
    要加const就必须要加不能省略 常对象常对象作为参数只能调用常
    不能调用非const函数!!和类走的static对象类似,逻辑上说不通
    语法上也说不通!!!牢记要用const必须要有不能省略
    const也算是一个类型区分的**
    可以加const或没加const来进行重载
        
    是什莫?
        是下标运算符,需要两个操作数。     a[] //a操作数一,[]内操作数二
    怎么重载
        可以重载为友元也可以重载为友元
    为什么要用?
        用来方便我们


6.++运算符
    1有什么用? 前++和后++区别
    前++的值时加之后的值a本身(左值)
    后++的值时a+1之前的值并且是个(右值)
    2.怎么重载?
    可以重载为成员和友元函数
        两个运算符都一样参数也一样怎么区分?
            c++规定 后++要多一个战位参数 int可以不带参数
            该参数没有实际的意义,而是用来区分
            前后++
    --相同

7.不能重载的运算符
    :: 
    .
    ?:
    .* .-> 
    记住~!!!

8.重载运算符的时候不能改变运算符的本来的性质
        操作数不能改变,优先级,结合性
        并且不要改变它本来的含义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值