C++ friend函数是否可以在不创建任何对象的情况下访问成员变量

C++ friend函数是否可以在不创建任何对象的情况下访问成员变量,c++,C++,继承的类可以不使用.(点)运算符访问成员变量。我们也可以访问friend类中的成员变量,而不使用对象名的点运算符。若否,原因为何 void show(); class Test{ int a; friend void show(); } void show(){ cout<<a; //why this is not possible } int main(){ show(); } void show(); 课堂测试{ INTA; 朋友虚空秀(); } 无效显示(){

继承的类可以不使用.(点)运算符访问成员变量。我们也可以访问friend类中的成员变量,而不使用对象名的点运算符。若否,原因为何

void show();

class Test{
 int a;
 friend void show();
}

void show(){
 cout<<a; //why this is not possible
}

int main(){
 show();
}
void show();
课堂测试{
INTA;
朋友虚空秀();
}
无效显示(){

cout你不能这样做。当你有一个成员函数时,即使在继承的类中,编译器也必须隐式地给函数一个隐式
这个
参数,即使你不是自己写的,它也是他们的。
另一方面,友元函数不是类的一部分,因此它没有访问它的权限


同样,从逻辑上讲,如果没有类的对象,则没有包含成员的任何内存,因此无法访问它。

您不能这样做。当您有一个成员函数时,即使在继承的类中,编译器也必须隐式地给该函数一个隐式
this
参数,即使您没有不管是你自己,都是他们的。 另一方面,友元函数不是类的一部分,因此它没有访问它的权限


同样,从逻辑上讲,如果没有类的对象,您就没有包含该成员的任何内存,因此您无法访问该成员。

如果您想在不创建类对象的情况下使用成员变量。 方式1:静态变量

void show();

class Test {
    static int a;
    friend void show();
};
int Test::a;
void show() {

    cout << Test::a; 
}

int main() {
    show();
}
void show();
课堂测试{
静态int a;
朋友虚空秀();
};
int测试::a;
无效显示(){

如果要使用成员变量而不创建类的对象,则不能。 方式1:静态变量

void show();

class Test {
    static int a;
    friend void show();
};
int Test::a;
void show() {

    cout << Test::a; 
}

int main() {
    show();
}
void show();
课堂测试{
静态int a;
朋友虚空秀();
};
int测试::a;
无效显示(){

因为类只是一个结构。在初始化对象之前,它不存在于内存中。派生类成员函数有一个隐式的
this
。“点”或“箭头”仍然存在,只是看不见。友元函数不是成员。谢谢你们两位,你们使我的想法变得更精细。你们不能这样做,因为
A
是数据结构的一个成员。为了访问其成员,该数据结构的一个实例必须存在。因为类只是一个结构。它直到y才存在于内存中初始化对象。派生类成员函数有一个隐式
this
。“点”或“箭头”仍然存在,只是看不见。朋友函数不是成员。谢谢你们两位,你们使我的想法变得更精细。你们不能这样做,因为
A
是数据结构的成员。必须存在该数据结构的实例才能访问其成员。谢谢,我得到了它。谢谢,我得到了它。