2016 - 2024

感恩一路有你

友元函数的声明和定义 友元函数应当在类的private中还是public中声明?

浏览量:2986 时间:2021-03-11 10:22:19 作者:admin

友元函数应当在类的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、友元的作用在于提高程序的运行效率(即减少了类型检查和安全性检查等都需要的时间开销),但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。

友元函数的声明和定义 声明友元类 友元函数

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。