class CLASS{
double x;
friend void f()
{
cout<<x<<endl; // ①
}
public:
CLASS(double n):x(n){} // ②
};
int main()
{
CLASS t(6.8),*p=&t;
t.f(); // ③
p->f(); // ④
return 0;
}
则在注释部分标注编号的行中,编译时没有语法错误的是( )。
1、输出x的值,f是友元函数,友元函数不能直接调用类对象
2、构造函数,初始化x为n
3、通过对象调用f函数,但是f是友元函数,调用是直接调用,所以直接写f()就可以了
4、通过指针调用f函数,但是f是友元函数,调用是直接调用,所以直接写f()就可以了
f()
是CLASS
的友元函数,虽然f()
可以访问CLASS
的所以成员函数和变量,但是访问时需要有CLASS
的对象,这里的x没有对象,所以错误f()
是友元函数,不是CLASS的成员函数,所以不能这样调用修改如下,供参考:
#include <iostream>
using namespace std;
class CLASS {
double x;
friend void f(CLASS tmp)
{
cout << tmp.x << endl;// ①
}
public:
CLASS(double n) :x(n) {}// ②
};
int main()
{
CLASS t(6.8), * p = &t;
f(t); // ③
f(*p); // ④
return 0;
}