lesson2(补充)关于>>运算符和<<运算符重载

简介: lesson2(补充)关于>>运算符和<<运算符重载

前言:

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

运行截图如下:

目录
相关文章
|
2月前
|
C++
C++(十五) 运算符重载
C++中的运算符重载允许对已有运算符的功能进行重新定义,从而扩展语言功能、简化代码并提升效率。重载遵循特定语法,如 `friend 类名 operator 运算符(参数)`。重载时需注意不可新增或改变运算符数量、语义、优先级、结合性和返回类型。常见示例包括双目运算符 `+=` 和单目运算符 `-` 及 `++`。输入输出流运算符 `&lt;&lt;` 和 `&gt;&gt;` 也可重载。部分运算符只能作为成员函数重载。
|
6月前
|
算法 程序员 编译器
【C++ 运算符重载】C++中的运算符重载:深入探讨++和--运算符
【C++ 运算符重载】C++中的运算符重载:深入探讨++和--运算符
46 0
|
6月前
|
算法 程序员 C++
【C++运算符重载】探究C++中的下标运算符[]重载
【C++运算符重载】探究C++中的下标运算符[]重载
58 0
|
编译器 C语言 C++
【C语言】 操作符(上): -- 算数 -- 移位 -- 位操作符 -- 赋值 -- 单目 -- 关系 -- 逻辑操作符2
【C语言】 操作符(上): -- 算数 -- 移位 -- 位操作符 -- 赋值 -- 单目 -- 关系 -- 逻辑操作符2
|
6月前
|
编译器
lesson2(补充)关于const成员函数
lesson2(补充)关于const成员函数
43 0
|
C语言
【C语言】 函数 -- 数组 -- 操作符
【C语言】 函数 -- 数组 -- 操作符
|
安全 编译器 C++
[C++] 类与对象(中)完整讲述运算符重载示例 -- 日期类(Date) -- const成员2
[C++] 类与对象(中)完整讲述运算符重载示例 -- 日期类(Date) -- const成员2
|
编译器 C++
[C++] 类与对象(中)完整讲述运算符重载示例 -- 日期类(Date) -- const成员1
[C++] 类与对象(中)完整讲述运算符重载示例 -- 日期类(Date) -- const成员1
|
C语言
【C语言】 操作符(上): -- 算数 -- 移位 -- 位操作符 -- 赋值 -- 单目 -- 关系 -- 逻辑操作符4
【C语言】 操作符(上): -- 算数 -- 移位 -- 位操作符 -- 赋值 -- 单目 -- 关系 -- 逻辑操作符4
|
存储 Serverless C语言
【C语言】 操作符(上): -- 算数 -- 移位 -- 位操作符 -- 赋值 -- 单目 -- 关系 -- 逻辑操作符3
【C语言】 操作符(上): -- 算数 -- 移位 -- 位操作符 -- 赋值 -- 单目 -- 关系 -- 逻辑操作符3