是否有必要在朋友函数中使用登录器

is it necessary to using accessors in friend function?

本文关键字:登录 函数 朋友 是否      更新时间:2023-10-16

这是类

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函数(或交换),则会随身携带仅将您作为朋友直接写给成员变量的朋友的剩余选择。

(请注意,如果流式输入失败,则应将对象留在默认(新构造)状态中。

流式传输应该是(最好仅在)需要写给流成员时,您通常不会直接访问。