访问功能替代方案而不破坏封装

时间:2015-02-22 07:07:28

标签: c++ encapsulation

除了编写一堆访问函数或重载运算符之外,是否还有其他方法或更短的替代方法来访问派生类中的私有基类成员?

3 个答案:

答案 0 :(得分:0)

如果你的意思是从那个不属于那个类或子类的地方那么没有。

但是,如果你的意思是来自另一个类,你可以使用受保护的关键字而不是私有,那么该子类将能够使用getter或setter访问那些数据成员。

答案 1 :(得分:0)

不,如果您想要对基类进行真正的封装,建议将成员设为私有,并且只允许通过函数进行访问。这允许你做保存不变量的事情。

但您应该只提供您需要的成员访问权限。不要在没有想到的情况下为所有内容添加访问器。如果您发现需要提供对您可能想要重新考虑设计的所有内容的访问权限。

如果你愿意牺牲封装,你当然可以保护成员。

答案 2 :(得分:0)

这是一个非常简单的示例显示差异

class parent {
  friend void f(some&);
public:
  int a_pc;
protected:
  int b_pd;
private:
  int c_pt;
};

void f(some& obj) {
  obj.a_pc = 0; // OK
  obj.b_pd = 0; // OK
  obj.c_pt = 0; // OK
}

void g(some& obj) {
  obj.a_pc = 0; // OK
  obj.b_pd = 0; // compile time error
  obj.c_pt = 0; // compile time error
}

class child : public parent {
  child() {
    a_pc = 0; // OK
    b_pd = 0; // OK
    c_pt = 0; // compile time error
  }
};