个人主页: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类型的对象,重载了<<,参数类型为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;
}
运行截图如下: