【发布时间】:2014-06-18 11:04:51
【问题描述】:
我想知道如何最好地在 C++ 中创建一个数据实体,其中“setter”是私有的,“getter”是公共的。即实体的创建者应该能够设置数据,但用户/消费者/客户端只能获取数据。
让我们考虑实体EntityX:
class EntityX
{
public:
EntityX(int x, int y) : x(x), y(y)
{}
int GetX() const {return x;}
int GetY() const {return y;}
private:
int x,y; // Effective C++ third edition, Item 22: Declare data members private
}
还有一个创建实体并将其返回给客户端的类方法:
const shared_ptr<EntityX> classz::GetEntityX()
{
shared_ptr<EntityX> entity(new EntityX(1,2));
return entity;
}
在我看来,这使得 setter 是私有的,getter 是公共的,但是如果数据成员大于 5-10,这个例子是不实用的......你如何制作一个实体类/结构,使得 setter 是“私有的” " 并且 "getter" 是 "public" 的,没有让构造函数接受所有数据成员变量。
提前致谢
【问题讨论】:
-
我猜只为你不想让别人改变的成员变量提供一个getter成员函数而不是一个setter成员函数。
-
我不希望实体类包含数据以外的任何内容。类的创建者必须提供所有数据
-
所以?为什么需要二传手?
-
您拥有的默认构造函数应该可以满足您的需求。不需要任何设置器,私有的或其他的。
-
常数或朋友(船)
标签: c++ private encapsulation public data-members