将cout重载为非好友助手运算符

Overloading cout as a Non Friend Helper Operator

本文关键字:运算符 好友 cout 重载      更新时间:2023-10-16

我有一个赋值的指令,它让我在这里经历了一个循环。我需要重载插入运算符来打印对象数据成员。但是,它规定重载器必须是非好友助手运算符。

如果是这样的话,如果它不是"朋友",它怎么能访问私人数据成员?如果这是可能的,我为什么要避免使用"朋友"?

以下是它逐字逐句地说的:

  • 将存储的字符串插入左ostream操作数的辅助非友元运算符
    这个操作符在字符串前面加上插入的数字,然后递增这个数字

我对C++有点陌生,所以我真的很感激你的帮助。

如果不是朋友,则需要使用对象的公共接口(ergo,您需要编写对象的公共界面以包含插入运算符所需的访问权限)。

例如,你可以做这样的事情:

class thing { 
    std::string name; 
public:
    std::string get_name() const { return name; }
    // ...
};
std::ostream &operator<<(std::ostream &os, thing const &t) { 
    return os << t.get_name();
}

请注意,我绝对不是推荐这是一种好的做法——相反,我认为通常是插入运算符成为朋友的更好主意。但是,如果你在一个班里,你被禁止以正确的方式做事,你就做你必须做的…