友元函数的声明和定义 友元函数应当在类的private中还是public中声明?
友元函数应当在类的private中还是public中声明?
首先,友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。
友元不是成员函数,但是它可以访问类中的私有成员。所以,友元声明只能出现在类定义中。因为友元不是授权类的成员,所以它不受其所在类的声明区域public private 和protected 的影响。构造函数声明成友元时,不能同时定义吗?
friend double REALSET::REALSET(INTSET &s)//自动成为inline函数
{
...
}
这段代码不对,有两个问题。首先,你不能在INTSET类中定义REALSET的成员函数,注意是不能定义,不是不能声明; 其次构造函数不能有返回值,把那个double去掉。
更改成这样:
class INTSET{
...
friend REALSET::REALSET(INTSET &s) //只保留声明
...
}//end of class INTSET
//REALSET构造函数移植INTSET之后。
//注意在此函数中使用了INTSET类的成员,所以必须定义在INTSET类之后。
REALSET::REALSET(INTSET &s)
{
...
}
友元函数为什么不直接定义为类的成员函数呢,他俩感觉没什么区别呀?
那就不要用友元函数。本来就有人认为完全不该用友元函数
使用运算符重载,有的时候不适合直接声明为成员函数。
class point {
private:
int x
int y
public:
point(int x,int y)
}
std::ostream& operator<<(std::ostream& os, const point& p)
//重载流输出运算符,运算符的左操作数必须是 std::ostream& 类型,不能直接声明为成员函数
//流输出函数必须访问point类的数据成员(包括private数据成员)
//典型实现是 return os << p.x << " " << p.y
不过这也有别的解决方法,不是把 operator<< 声明为友元函数,而是使用一个成员函数(类似于访问者模式)
class point {
private:
int x
int y
public:
point(int x,int y)
std::ostream& print_by(std::ostream& os)//成员函数print_by定义实际的输出方式
}
//重载流输出运算符,运算符的左操作数必须是 std::ostream& 类型,不能直接声明为成员函数
//不需要作为友元函数
std::ostream& operator<<(std::ostream& os, const point& p){
return p.print_by(os) //调用成员函数 print_by
}
C 如何将一个类的成员函数申明为另一个类的友元函数?
可以在类A中把类B的一个成员函数声明为自己的友元函数。 class A { void F() } #include "A.h" class B { friend void A::F() }
友元函数是否能访问当前类中对象成员的私有成员?
1、友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。
2、友元函数可以访问类的静态成员、私有成员和公有成员。
3、友元的作用在于提高程序的运行效率(即减少了类型检查和安全性检查等都需要的时间开销),但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。