@[Him2009](/user/322792) istream和ostream的重载需要放在外面或者加friend
by 樱初音斗橡皮 @ 2020-07-18 20:43:06
因为你没有传`*this`进去
by 樱初音斗橡皮 @ 2020-07-18 20:43:24
@[樱初音斗橡皮](/user/66287) 谢了
by Jasminoides @ 2020-07-18 20:47:25
举个例子:
```
class foo
{
int a;
public:
void input()
{
scanf("%d", &this->a);
return;
}
}
int main()
{
foo x;
x.input(); // 注意这里
return 0;
}
```
这里传入了`*this`,这里`this->a`可以简写成`a`,编译器知道你指的是调用这个函数的对象。调用的时候用`x.f()`这样的形式。
```
class foo
{
int a;
public:
friend void input(foo& x)
{
scanf("%d", &x.a);
return;
}
}
int main()
{
foo x;
input(x); // 注意这里
return 0;
}
```
用`friend`表示可以访问对象的`private`及`protected`元素,但是注意这里是直接用`f(x)`形式调用,也就是说不需要传入`*this`。
同样地,可以放在外面定义,但是缺陷在于无法访问`private`及`protected`内容。
by 樱初音斗橡皮 @ 2020-07-18 20:49:39
@[Him2009](/user/322792)
by 樱初音斗橡皮 @ 2020-07-18 20:49:45
我在
by Jasminoides @ 2020-07-18 21:05:48