私人吸气者和二传手

时间:2018-02-20 12:52:27

标签: c++ oop design-patterns software-design

我还是C ++和OOP编程的新手,我只是想知道一些好奇的东西。 我有一个类名为Foo,有一些私人成员。 我的问题是:Foo对象在其生命周期内不会“传递数据”到其他对象。他们接收数据,做事,并将新数据保存到文件中。这意味着,只有Foo个对象才能访问Foo个私有成员。 实施私人getter和setter是不对的? 或者我应该使用直接访问? 下面的伪代码:

这可以吗?

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;
}

不确定我是否以简单的方式解释了我的疑虑。 提前感谢您的回复和帮助。

3 个答案:

答案 0 :(得分:4)

private&#34; getters&#34;和#34; setters&#34;没有意义,除非你以某种有趣的方式利用多态性。

通过构造函数设置成员变量是最好的办法,让成员const可以防止他们无意中进行修改。

避免&#34;制定者&#34;只要有可能,无论它们是否可访问,因为它们只是绕过封装。

答案 1 :(得分:2)

我不是最有经验的C ++开发人员,但从我的角度来看,使用直接访问并不是一种糟糕的做法,而且编写时间也更短。 另一方面,在你的界面中有这样的成员清楚地表明只有Foo对象可以读取Foo的私人成员,所以两种方式都可以接受。

答案 2 :(得分:2)

拥有getter和setter的要点是以灵活和可扩展的方式控制对类成员的访问。如果你知道它们永远不会被类的外部客户端使用,你就不会从创建getter和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;
}