c++ - 我应该如何处理只应由工厂类使用的 setter 方法?

标签 c++ oop

我正在使用一个工厂类从内存池中生成一些小类。这些小类一旦被工厂返回就保持不变。

目前这些小对象之一的典型声明是这样的:

class LittleObject
{
public:
    ...//non-getter and setter member functions
    int getMemberVariable1() const;//should be accessible to everyone
    void setMemberVariable1(int newMemberVariable1Value);//should only be accessible to factory class
    ...//more getters and setters
private:
    ...
};

因此,如您所见,getter 和 setter 都在公共(public)区域。但是唯一应该设置值的时间是在工厂类构建它的时候。现在,我可以清楚地看到一个选项,我将 setter 函数移动到私有(private)访问并使工厂成为 LittleObject 类的友元。我觉得这个选项有点不雅,因为它向工厂公开了其他私有(private)成员函数。工厂没有业务访问的私有(private)成员函数。

所以我的问题是:只有工厂类才能使用 setter 函数的最佳方法是什么?

最佳答案

我会使用 friend class :

class LittleObject
{
    friend class LittleObjectFactory;

public:
     int getMemberVariable();

private:
     void setMemberVariable( int value );
};

关于c++ - 我应该如何处理只应由工厂类使用的 setter 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26538071/

相关文章:

c++ - cout 语句中的调用顺序说明,后缀与前缀

c++ - 面向对象的C++编程中的复制,引用和指针的用例和首选项

java - Memento 和 Command 设计模式有什么区别?

Python 从对象本身更改对象引用

android - 在 Android 上使用 JNI 使用上下文指针调用函数会导致段错误

c++ - 有哪些用 Qt 编写的可以在 OSX 和 Windows 上运行的应用程序?

c++ - 具有内部链接的命名空间

c++ - 使用 show() 只打开一个 QDialog 实例,如果我关闭 QDialog,对象是否也被删除

javascript - 查找 Javascript 应用程序中扩展基类的所有类

c++ - 按成员复制、按位复制、浅复制和深复制有什么区别?