是否有必要在朋友函数中使用登录器
is it necessary to using accessors in friend function?
这是类
class Instructor
{
public:
Instructor ( int id , string name ) ;// constructor
~Instructor () ;
// methods
string getName () ;
int getID () ;
private:
int id ;
string name ;
friend ostream & operator<< ( ostream & out , Instructor & instructor ) ;
} ;
这是Ostream函数
ostream & operator<< ( ostream & out , Instructor & instructor )
{
out << "ID:" << instructor.getID() << "t NAME:" << instructor.getName() << "t OFFERED_COURSES:" ;
return out << endl ;
}
这是getName和getID方法
string Instructor::getName ()
{
return this->name ;
}
int Instructor::getID ()
{
return this->id ;
}
我的问题是为什么我们需要使用getID和getName函数。我们不能通过写"这个 ->名称"来访问名称?感谢您的答案。
必要的否,建议是。实际上,根本不需要声明friend
,这是更封装的。
它可能不是很多"不能",因为"不应该"。在此刻,getID()
只是返回基础变量,但不能保证它不会更改为其他表示。遇到时尊重封装。
您可以执行此操作(直接在朋友函数中访问私有成员),但这不是做事的最佳方法。使用检查器功能,因为应该写入检查器以揭露班级的私人状态,就像将班级写入外部使用的方式一样。实际的私有字段供课程使用自身来完成内部需要做的事情。
因为您在操作员功能中不使用私人成员,所以您甚至不需要它是朋友。
no,朋友确实是您类实施的扩展部分,因此可以直接访问它。
如果您已将函数或类声明为不属于其实施细节的朋友,那可能是朋友的不良使用。
在您的情况下,您实际上可以完全删除流媒体朋友的过载,但是,如果您决定您的班级也支持流式传输,并且不想支持Setter函数(或交换),则会随身携带仅将您作为朋友直接写给成员变量的朋友的剩余选择。
(请注意,如果流式输入失败,则应将对象留在默认(新构造)状态中。
流式传输应该是(最好仅在)需要写给流成员时,您通常不会直接访问。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 是否有任何 C 函数或 API 来获取当前登录用户下运行的进程列表
- 是否有必要在朋友函数中使用登录器
- QuickFIX和MFC:无法使用initiator .logon()函数登录
- 实现一个登录函数或宏,可以记录日期和函数名