2021年3月5日全局运算符

全局操作符重载

Node z1;
z1 = 2.2 + z1//这里需要全局操作符重载,

全局操作符重载,需要去掉名字空间,并且在参数中按顺序添加所有所需要的参数,例如

class Node{
    public:
    friend Node operator+(double a,Node z);//声明友元函数,这时候就可以访问z的私有成员了,注意这个函数并不是此类的成员函数
};


Node operator+(double a,Node z){
    //代码块,一定要注意,这里不能访问z的私有成员
    //解决办法:在类里面声明一个友元函数👆
}

注意:操作符重载必须有一个参数是类类型或者枚举类型,即操作符重载不可以实现两个指针之间的操作,例如指针相加

cout运算重载

cout是ostream类型,

注意:
  1. 输出操作符重载是全局操作符重载
  2. 需要在类中添加声明友元函数
  3. cout是ostream类中已经定义好的对象实例,定义结束后使用的仍然是cout输出
class Node{
    private:
    int a;
    int b;
    public:
    friend ostream& operator<<(ostream &mycout, Node z);//别忘了声明友元函数
}

//cout << int;cout使用方法

ostream & operator<<(ostream & mycout,Node z) {//固定的,ostream也是一个类,cout就是ostream的一个对象实例;在函数体中,把形参mycout当成cout使用
    mycout << "(" << z.a << "+" <<z.b <<"i)";
    return mycout;
    
}//返回的也是ostream引用

//使用输出操作符的重载,仍然是使用的cout,定义时的mycout只是形参,重载不影响其他函数的输出
cout << z << 1.3 << 1;

延申:&是引用

引用&

引用即别名,操纵引用对象可以直接修改原对象

引用对象在创建时必须赋初值

int a = 10;
int& x = a;//把int&看在一起,&出现在此属于标记符

可以在函数中使用

void swap(int &a,int &b){
    int tmp = a;
    a = b;
    b = tmp;
}//因为传入引用值,可以实现a和b原值的改变,改变实参

cin运算重载

cin运算重载和cout类似,但是cin是istream的对象实例,

class Node{
    private:
    int a,b;
    public:
    friend istream& operator >> (istream& mycin,Node& z);
}



istream& operator >> (istream& mycin , Node& z){//因为要改变z的值,所以要使用引用
    mycin >> z.a >> z.b;
    return mycin;
}

int main(){
    Node node;
    cin >> node;
    return 0;
}

z1(z4)

在类的构造函数中传参此类,要加引用

Node(Node & z){
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值