c++操作符重载

#include <iostream>
using namespace std;
int main()
{
    cout<<"hello word"<<endl;  //endl换行 cout输出,程序是printf();函数
    cin>>x;            //输入x 相当于scanf();
    cout<<"x is:"<<x<<endl; //打印x is 输入x的值
    return 0;
} 

c语言中<<或者>>是左移和右移符号,而cin后面的>> ,cout后面的<<则代表输入输出符号,这是操作符重载例子

操作符重载

C++中通过operator关键字可以利用函数扩展操作符
operator的本质是通过函数重载实现操作符重载
c++操作符重载本质是函数调用

例子,结构体操作符重载

struct student 
{
 int a;
 int b;
};
student operator+(student s1,student s2) //利用关键字operator对+号重载
{
    student s3={0,0};
    s3.a=s1.a+s2.a;
    s3.b=s1.b+s2.b;
    return s3;
}
int main()
{
    student s1={1,2};
    student s2={3,4};
    student s3=s1+s2; /*这里的+其实是操作符重载,按正常情况结构体是不可以相加的,而c++操作符重载赋予了+号特殊的功能*/
    return 0;
}

例子类操作符重载

由于c++类的成员变量一般为私有变量,所以得先把operator定义的函数设为类的友元函数

class student
{
    int a;
    int b;
    public:
    student(int a,int b)
    {
        this->a=a;
        this->b=b;
    }
    int gata()
    {
         return a;
    }
    int getb()
    {
        return b;
    }
    friend student operator+(const student& s1,const student& s2);  //设置成友元,才可以访问私有变量
};
student operator+(const student& s1,const student& s2)
{
   student  s(0,0);
   s.a=s1.a+s2.a;
   s.b=s1.b+s2.b;    //设置成友元外部才可以访问私有变量
   return s;
}
int main()
{
    student s1(1,2);
    student s2(3,4);
    student s3=s1+s2;  //这是操作符重载,其实s1,s2作为函数的两个参数传递给了重载函数

return 0;
}

>> <<符号重载实验

正常情况下是不能直接打印类的例如:

cout<<s1<<enl;  //erro

所以我们要对<<重载以便支持直接打印类成员

class student
{
    int a;
    int b;
    public:
    student(int a,int b)
    {
        this->a=a;
        this->b=b;
    }
    int gata()
    {
         return a;
    }
    int getb()
    {
        return b;
    }
    friend student operator+(const student& s1,const student& s2);  //设置成友元,才可以访问私有变量
    friend ostream& operator<<(ostream& cout,student& s); //也要设为友元
};
ostream& operator<<(ostream& cout,student& s) //ostream 标准流
{
    cout<<s.a<<"和"<<s.b;  打印两个值
    return cout;    //返回cout符合c++标准流
}
student operator+(const student& s1,const student& s2)
{
   student  s(0,0);
   s.a=s1.a+s2.a;
   s.b=s1.b+s2.b;    //设置成友元外部才可以访问私有变量
   return s;
}
int main()
{
    student s1(1,2);
    student s2(3,4);
    student s3=s1+s2;  //这是操作符重载,其实s1,s2作为函数的两个参数传递给了重载函数
    cout<<s3<<endl;  //等同于先把cout和s3送给重载函数作为参数,然后返回值又等同于cout,然后又把cout和endl作为参数送给重载函数(这里涉及优先级问题,所以一级一级来)
return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值