class Node {friend ostream& operator << (ostream& cout, Node& list);int Data; Node* next;};ostream& operator<<(ostream& cout, Node&list) { cout << "[ "; int n = list.data; if (n > 0) { linkList r = &list; while (--n) { r = r->next; cout << r->data << ", "; } cout << r->next->data; } cout<< " ]" << endl; return cout; }失效,仍无法访问私有成员
时间: 2024-01-27 16:02:36 浏览: 75
在上面的 `Node` 类中,`operator<<` 函数声明了 `Node` 类为其友元,但是在函数实现中仍然无法访问 `Node` 类的私有成员 `data`。这是因为函数的参数类型是 `Node&` 而不是 `const Node&`,这违反了常量成员函数的规则。如果将参数类型改为 `const Node&`,则可以访问私有成员。修改后的代码如下:
```
class Node {
friend ostream& operator<<(ostream& cout, const Node& list);
int data;
Node* next;
};
ostream& operator<<(ostream& cout, const Node& list) {
cout << "[ ";
int n = list.data;
if (n > 0) {
Node* r = const_cast<Node*>(&list);
while (--n) {
r = r->next;
cout << r->data << ", ";
}
cout << r->next->data;
}
cout << " ]" << endl;
return cout;
}
```
在上面的代码中,将 `Node&` 改为了 `const Node&`,并使用 `const_cast` 将参数转换为非常量引用。这样,在函数实现中就可以访问 `Node` 类的私有成员 `data` 了。
阅读全文