友元类中的成员函数都是友元函数 友元函数是否能访问当前类中对象成员的私有成员?

[更新]
·
·
分类:互联网
4856 阅读

友元类中的成员函数都是友元函数

友元函数是否能访问当前类中对象成员的私有成员?

友元函数是否能访问当前类中对象成员的私有成员?

1、友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。
2、友元函数可以访问类的静态成员、私有成员和公有成员。
3、友元的作用在于提高程序的运行效率(即减少了类型检查和安全性检查等都需要的时间开销),但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。

c 怎样调用头文件中的私有函数?

声明为私有的函数,目的就是为了防止外部访问和不恰当的修改,如果非要访问可以声明为该类的友元函数,才可以调用

C :构造函数和析构函数属于成员函数吗?

C 中,成员函数包括构造函数、析构函数、私有函数和公有函数四种。友元函数则不属于成员函数,其区别是,在定义友元函数时,不需要限定符“::”,而声明时,必须加上friend关键字。

C 中类的友元函数能不能访问类的静态数据成员?

classA{public:staticintnumberfriendvoidhanshu()}voidhanshu(){coutltltA::number}intA::number456//注意这里,你对静态成员初始化有错误intmain(){Aahanshu()system(

友元函数为什么不直接定义为类的成员函数呢,他俩感觉没什么区别呀?

那就不要用友元函数。本来就有人认为完全不该用友元函数
使用运算符重载,有的时候不适合直接声明为成员函数。
class point {
private:
int x
int y
public:
point(int x,int y)
}
std::ostreamamp operatorltlt(std::ostreamamp os, const pointamp p)
//重载流输出运算符,运算符的左操作数必须是 std::ostreamamp 类型,不能直接声明为成员函数
//流输出函数必须访问point类的数据成员(包括private数据成员)
//典型实现是 return os ltlt p.x ltlt ltlt p.y
不过这也有别的解决方法,不是把 operatorltlt 声明为友元函数,而是使用一个成员函数(类似于访问者模式)
class point {
private:
int x
int y
public:
point(int x,int y)
std::ostreamamp print_by(std::ostreamamp os)//成员函数print_by定义实际的输出方式
}
//重载流输出运算符,运算符的左操作数必须是 std::ostreamamp 类型,不能直接声明为成员函数
//不需要作为友元函数
std::ostreamamp operatorltlt(std::ostreamamp os, const pointamp p){
return _by(os) //调用成员函数 print_by
}