C++ friend函数是否可以在不创建任何对象的情况下访问成员变量
继承的类可以不使用.(点)运算符访问成员变量。我们也可以访问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; 朋友虚空秀(); } 无效显示(){
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
是数据结构的成员。必须存在该数据结构的实例才能访问其成员。谢谢,我得到了它。谢谢,我得到了它。