继承的类可以在不使用。(点)运算符的情况下访问成员变量。我们是否也可以访问友元类中的成员变量,而无需使用带有对象名称的点运算符。如果没有,为什么?
void show();
class Test{
int a;
friend void show();
}
void show(){
cout<<a; //why this is not possible
}
int main(){
show();
}
答案 0 :(得分:0)
你不能做这样的事情。当你有一个成员函数时,即使在一个继承的类中,编译器也隐含地将该函数作为一个隐式this
参数,即使你不自己编写它,也就是它们。
另一方面,朋友功能不是课程的一部分,因此它无法访问它。
另外,从逻辑上讲,如果没有班级的对象,你就没有任何包含该成员的记忆,因此你无法访问它。
答案 1 :(得分:0)
如果要使用不带类的创建对象的成员变量。 way1:静态变量
void show();
class Test {
static int a;
friend void show();
};
int Test::a;
void show() {
cout << Test::a;
}
int main() {
show();
}
way2:发送show函数的参数获取对类Test的对象的引用
void show();
class Test {
int a;
friend void show(Test* test);
};
void show(Test* test) {
cout << test->a;
}
int main() {
show(new Test);
}
你可以找到:
友元声明出现在类主体中,并授予函数或其他类访问友元声明所在类的私有和受保护成员的权限。