#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;
}