c++ - 在 C++ 的类中重载运算符 <<

标签 c++ operator-overloading

我有一个使用结构的类,我想重载该结构的 << 运算符,但仅限于类内:

typedef struct my_struct_t {
  int a;
  char c;
} my_struct;

class My_Class
{
  public:
    My_Class();
    friend ostream& operator<< (ostream& os, my_struct m);
}

只有当我用 friend 关键字声明 operator<< 重载时,我才能编译,但随后运算符在我的代码中到处都被重载,而不仅仅是在类中。如何仅在类中重载 my_struct 的 << 运算符?

编辑:我想使用重载运算符打印一个 my_struct,它是 My_Class 的成员

最佳答案

不要使用运算符<<。使用命名成员函数,并将其设为私有(private)。

class My_Class
{
  public:
    My_Class();
 private:
    void Print( ostream & os, const my_struct & m );
};

请注意,无论您使用哪种方法,您都应该将结构作为常量引用传递。

编辑:没有必要让运算符 << 成为类的成员,这样您就可以使用它来打印类的成员。您可以使它成为该结构的友元,或成为该类随后使用的完全自由的函数。

关于c++ - 在 C++ 的类中重载运算符 <<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200475/

相关文章:

python - 更改自定义类中 __add__、__mul__ 等方法的操作顺序

c++ - `void operator=(T&&)` 和 `T& operator=(T&&)` 有什么区别?

c++ - fatal error LNK1112,MS Visual Studio 2012 中的 VC++ 目录位置?

c++ - 如何使用 objdump 在高度优化的目标文件中交错源代码?

c++ - 当尝试连接 ostringstream 中的字符串时,字符串内容被修改和重构,字符串被添加到开头

c++ - 在 C++ 中获取文件描述符的问题

c++ - 为什么每当我尝试运行此 LinkedList 删除函数时都会收到段错误错误?

c++ - 模板化转换运算符的重载解析

c++ - 访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样

c++ - 对如何重载 == 运算符感到困惑