前言:
cout和cin我们在使用时需要包含iostream头文件,我们可以知道的是cout是写在ostream类里的,cin是写在istream类里的,他们都是定义出的对象,而<< 和 >> 分别在他们的类里做了不同的运算符重载
接下来我们可以小小验证一下
class freedom { public: //初始化队列 freedom() :_year(2023) ,_month(10) ,_day(28) {} ostream& operator<<(ostream& mycout) { mycout << "_year:>" << _year << endl; mycout << "_month:>" << _month << endl; mycout << "_day:>" << _day << endl; return mycout; } void print() { cout << "_year:>" << _year << endl; cout << "_month:>" << _month << endl; cout << "_day:>" << _day << endl; } private: int _year; int _month; int _day; };
在我们自定义的freedom类里,我们重载了<<,返回值类型为ostream&,参数我们准备传cout,这样我们使用mycout就相当于使用cout(尽管这很鸡肋,但我们只是为了验证)。
int main() { // <<流插入运算符 int a = 6; cout << a << endl; freedom b; //b是freedom类型的对象,重载了<<,参数类型为ostream(虽然看起来没啥用) b << (cout); b.operator<<(cout); //cout是ostream类型的对象,重载了<<,参数类型为int cout << 5 << endl; cout << (5) << endl; cout.operator<< (5) <<endl; //所以两者区别在于ostream这个类里实现了<<不同类型重载,而且定义出的 //对象传隐藏参数this是ostream*类型的,也就有了位置去传内置类型 //而我们自定义类型的this是freedom*类型,显式参数还传了ostream引用 //想要模拟cout的实现,那么就会重命名,不会构成函数重载,所以我们大致 //了解思路即可 //ostream& operator<<(ostream& cout,int num) //{ // ... // return cout; //} return 0; }
运行截图如下: