个人主页:Lei宝啊
愿所有美好如期而遇
前言:
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类型的对象,重载了<<,参数类型为intcout << 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;
}
运行截图如下: