在不破坏封装的情况下访问功能替代品

access function alternatives without breaking encapsulation

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

如果您的意思是从不在 class 或子 class 内的某个地方,那么不会。

但是如果你的意思是来自另一个 class 你可以使用 protected 关键字而不是 private 那么子 class 将能够访问那些数据成员而不需要 getter或 setter。

不,如果你想真正封装你的基础class,建议将成员设为私有,并且只允许通过函数访问。这允许你做一些事情,比如保留不变量。

但是您应该只向需要的成员提供访问权限。不要不假思索地为所有内容添加访问器。如果您发现确实需要提供对所有内容的访问权限,您可能需要重新考虑您的设计。

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

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

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