#include<iostream>#include<string>
using namespace std;
class Num
{
public:Num(int num):num(num){}voidprint(){
cout << num << endl;}
Num operator++(){
cout <<"前置++"<<endl;
this->num++;//++this->num;return(*this);}//后置++引入了一个标记,参数int
Num operator++(int)//后置++:先运算 后自增{
cout <<"后置运算符"<< endl;
Num object(this->num);
this->num++;return object;}
protected:int num;};intmain(){
Num value(10);//value++;++value;//value+1;
value.print();
value++.print();
value.print();return0;}
四、流运算符的重载
流运算符重载 左移 右移
简化打印
自己写的类也能实现效果,没必要都展开
cin:>> istream类 输入流对象
cout: << ostream类 输出流对象
1.流重载必须是友元
2.流重载尽量用&#include<iostream>//iostream 流类体系#include<string>
using namespace std;
class Data
{
public:Data(string name,int age,int num):name(name),age(age),num(num){}
friend istream& operator>>(istream& object, Data& data);// 输入流返回输入流对象
friend ostream& operator<<(ostream& object, Data& data);
protected:
string name;int age;int num;};
istream& operator>>(istream& in, Data& data)// 输入流返回输入流对象{//in等效为cin
in >> data.name >> data.age >> data.num;//返回cin return in;}
ostream& operator<<(ostream& out, Data& data){//out等效cout
out << data.name <<":"<< data.age <<":"<<data.num;//返回coutreturn out;}
class MM
{
public:MM(){}
friend void operator>>(istream& in, MM& mm){//传cin
in >> mm.name >> mm.age;}//out=cout mm等于实参
friend void operator<<(ostream& out, MM mm){//传cout//cout<<mm.name<<mm.age;
out << mm.name << mm.age;}
protected:
string name;int age;};intmain(){
string str ="Iloveyou";//cin.operator>>(str); 别人写的 只能友元
cin >> str;
cout << str;
Data myData("MM",18,1001);
cout << myData << endl;
cin >> myData;//流重载 返回的是一个流对象
cout << myData << endl;
cout <<1<<2<<3<< endl;//cout流对象
MM mm;//operator>>(cin,mm); 函数名(函数参数)
cin >> mm;//mm自定义类型 //opetator<<(cout,mm);
cout << mm;// opetator<<(cout,mm); 函数名(函数参数)//cout << mm << 1 << endl; 为啥报错return0;}
五、对象加常量
1.类中类的访问
2.运算符重载特殊用法
#include<iostream>
using namespace std;
class MM
{
public:MM(int data):data(data){}voidprint(){
cout << data << endl;}
friend MM operator+(MM one, MM two){returnMM(one.data + two.data);}
MM operator +(MM object){returnMM(this->data + object.data);}
protected:int data;};
class A
{
public:
class B //B是受A权限限定,如果不是public属性,类外不能访问{
public:B(int b):b(b){}int&getB(){return b;}
protected:int b;};};intmain(){
A::B object(13);//类中的属性只能通过对象访问
object.getB()=100;
A a;//运算符重载操作普通数据和对象运算符
MM mm(13);
MM result =1+ mm;//1.operator+(mm); 只能友元// 形参 传参 强制类型转换//result = mm + 1; //mm.operator+(1); 成员函数 友元 都可以
result.print();return0;}