C++中类的友元函数能不能访问类的静态数据成员
类的友元函数能访问类所有成员,那静态的呢?我试过了不可以#include<iostream>usingnamespacestd;classA{public:statici...
类的友元函数能访问类所有成员,那静态的呢?我试过了不可以
#include<iostream>
using namespace std;
class A
{
public:
static int number;
friend void hanshu();
};
void hanshu()
{
cout<<A::number;
}
int number=456;
int main()
{
A a;
hanshu();
return 0;
}
为什么? 展开
#include<iostream>
using namespace std;
class A
{
public:
static int number;
friend void hanshu();
};
void hanshu()
{
cout<<A::number;
}
int number=456;
int main()
{
A a;
hanshu();
return 0;
}
为什么? 展开
4个回答
展开全部
class A
{
public:
static int number;
friend void hanshu();
};
void hanshu()
{
cout<<A::number;
}
int A::number=456; //注意这里,你对静态成员初始化有错误
int main()
{
A a;
hanshu();
system("pause");
}
还要注意,并不是友元函数能访问类中的所有成员,这样理解是错误的,正确的理解是,友元函数能通过类的对象访问类中的所有成员,友元函数是不能直接访问类中的私有成员的,比如
class A{int a; public: friend void f();}
void f(){a=1;} //这样就会出错,只能通过类的对象来访问,比如
void f(){A ma; ma.a=1;}//这样就正确,如果函数f不是友元,则ma.a是错误的。
{
public:
static int number;
friend void hanshu();
};
void hanshu()
{
cout<<A::number;
}
int A::number=456; //注意这里,你对静态成员初始化有错误
int main()
{
A a;
hanshu();
system("pause");
}
还要注意,并不是友元函数能访问类中的所有成员,这样理解是错误的,正确的理解是,友元函数能通过类的对象访问类中的所有成员,友元函数是不能直接访问类中的私有成员的,比如
class A{int a; public: friend void f();}
void f(){a=1;} //这样就会出错,只能通过类的对象来访问,比如
void f(){A ma; ma.a=1;}//这样就正确,如果函数f不是友元,则ma.a是错误的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
静态成员未定义,
class A
{
private:
static int number;
friend void hanshu();
};
int A::number=34;
在类体中只是声明
class A
{
private:
static int number;
friend void hanshu();
};
int A::number=34;
在类体中只是声明
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一楼正解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询