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;
}
为什么?
展开
 我来答
祜风
2015-09-16 · TA获得超过226个赞
知道小有建树答主
回答量:313
采纳率:100%
帮助的人:132万
展开全部
1、 友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。
2、 友元函数可以访问类的静态成员、私有成员和公有成员。
3、友元的作用在于提高程序的运行效率(即减少了类型检查和安全性检查等都需要的时间开销),但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。
黄邦勇帅哥哥
2010-04-10 · TA获得超过3987个赞
知道大有可为答主
回答量:1199
采纳率:100%
帮助的人:473万
展开全部
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是错误的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hejianliangjia
2010-04-10 · 超过15用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:35.9万
展开全部
静态成员未定义,
class A
{
private:
static int number;
friend void hanshu();
};
int A::number=34;

在类体中只是声明
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cmnull
2010-04-10 · TA获得超过310个赞
知道小有建树答主
回答量:102
采纳率:0%
帮助的人:144万
展开全部
一楼正解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式