c++ - 私有(private) getter 和 setter

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

<分区>

我对 C++ 和 OOP 编程还是个新手,我只是想知道一些奇怪的事情。 我有一个类,我们将其命名为 Foo,其中包含一些私有(private)成员。 我的问题是:Foo 对象在其生命周期内不会向其他对象“传递数据”。他们接收数据,做事,并将新数据保存到文件中。这意味着,只有 Foo 对象可以访问 Foo 私有(private)成员。 实现私有(private)的 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;
}

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

最佳答案

编写 private“getter”和“setter”是没有意义的,除非您以某种有趣的方式利用多态性。

通过构造函数 设置您的成员变量是最好的做法,并且使成员成为const 可以防止它们被无意修改。

无论其可访问性如何,都应尽可能避免使用“setter”,因为它们所做的只是规避封装。

关于c++ - 私有(private) getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48885714/

相关文章:

c++ - 制作 : g++: error: CreateProcess: No such file or directory

c++ - STL std::remove_copy

c++ - 强制使用通用方法名称

php - 使用数据映射器模式,实体(领域对象)应该知道映射器吗?

c++ - 在类的声明中有一个分号是否可移植

c++ - 在命名函数上放置断点

C++ I/O 文件流相对于 C 语言的优势

c++ - 类中 constexpr 关键字的问题

java - 在 Java 中创建嵌套的 Fluent API

c# - 有没有比使用 Provider Factory 模式更简洁的解决方案?