2014-09-12 73 views
0

我已經得到了這些指令,讓我在這裏通過一個循環。我需要重載插入操作符來打印出一個對象數據成員。但是,它指出,overloader必須是非朋友幫手操作員。作爲非朋友幫手操作員超載cout

如果是這樣的話,如果它不是'朋友',它如何訪問私有數據成員?如果這是可能的,爲什麼我應該避免使用'朋友'?

下面是你應該說一個字一個字:

  • 幫手非好友運算符插入存儲串入左ostream的操作數。
    此操作前加上插入的數目字符串,並增加這個數字

我有點新的C++,所以我真的很感激幫助。

回答

3

如果不是朋友,它需要使用對象的公共接口(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(); 
} 

注意,我絕對不推薦這是很好的做法 - 而相反,我認爲這是經常一個更好的主意讓插入操作員成爲朋友。但是,如果你在一個班級,並且你被禁止以正確的方式做事,你就做你必須做的事情......

+0

我猜想一定有不同。我究竟該怎麼做呢? – Kris 2014-09-12 17:11:34

+0

@SomeDeveloper:我已經添加了一個例子。 – 2014-09-12 17:17:06

+0

非常感謝傑裏。是的,這似乎很奇怪。但是,唉,我認爲它只是爲了讓人們「思考」而不是強制適當的做法。謝謝你的幫助! – Kris 2014-09-12 17:18:08