私人捕获者和固定器



我仍然是C 和OOP编程的新手,我只是想知道一些好奇的东西。我有一个班级,让我们用一些私人成员命名Foo。我的问题是:Foo对象在其寿命中不会将数据传递到其他对象。他们接收数据,做事并保存新数据以归档。这意味着,只有Foo对象将访问Foo私有成员。实施私人盖特斯和固定器是错误的吗?还是我应该使用直接访问?伪代码下面:

这还可以吗?

class foo
{
  private:
    string a;
    string b;
    string c;
    void setA(string A){this->a=A;}
    string getA()const{return this->a;
    void setB(string B){this->b=B;}
    string getB()const{return this->b;
    void setC(string C){this->c=C;}
    string getC()const{return this->b;
  public:
    //many omitted methods//
    void Method(); //<-- this method does things and calls private getters and setters to modify private members
}

主要:

{
Foo obj=....;
obj.Method();
}

或应该:

class foo
{
  private:
    string a;
    string b;
    string c;
  public:
    //many omitted methods//
    void Method();
}
void foo::method()
{
    string s1;
    //initialize s1;
    this->a=s1; //operation example
    std::cout<<"A equals: "<< this->a;
}

不确定我是否以简单的方式解释了我的担忧。预先感谢您的答复和帮助。

编写 private" getters"one_answers" setters"是毫无意义的,除非您以某种有趣的方式利用多态性。

通过A 构造函数设置您的会员变量是最好的选择,使成员const可防止其无意修改。

避免使用"设置器",无论其可访问性如何,因为它们的执行范围都只不过是绕过封装。

我不是最有经验的C 开发人员,但是从我的角度来看,使用直接访问并不是一个不好的练习,它将需要更少的时间来写作。另一方面,界面中的此类成员清楚地表明,只有foo对象才能读取foo的私人成员,因此两种方式都是可以接受的。

拥有Getters和Setters的要点是以灵活且可扩展的方式控制对类成员的访问。如果您知道班级的外部客户永远不会使用它们,那么您将不会从创建Getters和Setter中获得任何内容,因此我建议不要写它们。

他们只会使您的源文件混乱并使您的代码更难阅读。


通过他们的方式,您无需每次访问成员时都使用this

class foo {
  private:
    string a;
    string b;
    string c;
  public:
    //many omitted methods//
    void Method();
}
void foo::method() {
    string s1;
    a=s1; 
    std::cout<<"A equals: "<< a;
}

最新更新