0

如果问题标题不能有效(或根本)反映我的实际问题,我深表歉意;这是我第一次在 stackoverflow 上提问或回答,可能搞砸了……

无论如何,我的(详细)问题是这样的:

在需要使用私有成员变量的类中定义公共成员函数时,每个变量(私有变量)都具有公共成员“getter”函数(请不要回答说“失去 getter/setter...”,我使用它们),会不会更好——实际上是“更好”,比如让类在 C++ 编译器之间更“可扩展”,哪个选项允许更多“前向兼容性”——使用 this->m_variable 或使用 this- >getm_variable()?

我从我目前正在进行的项目中包含了以下代码示例(创建一个名为 Family 的类),以尝试澄清我的意思:

Family.h 的片段

private:
    Person* children; // array of Person objects - Person is a member struct
    size_t numChildren;

public:
    enum gender { NONE = 0, MALE, FEMALE }
    size_t countChildren() { return numChildren; }
    size_t countChildren(gender g);
    Person* getChild() { return children; }

Family.cpp 的片段

// this is the specific function example:
size_t Family::countChildren(gender g) {
    for (size_t i = 0; i < this->numChildren; i++) {
        ...CODE TO COUNT CHILDREN OF SPECIFIED GENDER...
    }
    return # of children with gender g   // pseudocode, obviously...
}

因此,现在对于示例的问题已更改:

countChildren(gender g)在我拥有的函数的定义中i < this->numChildren;(就我之前所说的指标而言)使用会更好i < this->countChildren();吗?同样,当为同一个 for 循环遍历 children 数组时,Person*在当前迭代中使用*(this->children + i)OR to use来定义 each 会更好*(this->getChild() + i);吗?

提前感谢您的帮助,如果这个问题对于stackoverflow来说太“基于讨论”,我深表歉意,正如我之前提到的,这我第一次提出问题。

4

2 回答 2

1

在理想的世界中,您总是会在内部使用 getter 来引用逻辑属性。 仅当所述属性要公开公开时,这才真正重要;如果您发现自己编写了一个private仅用于实现细节的 getter,请停止编码并喝杯咖啡,然后想想您在做什么。

为什么在内部使用 getter? 出于同样的原因,您将在其他任何地方使用它们;他们对班级代表的变化更具弹性。除了这一次,受益的不仅仅是其他代码,还有这个类。

通过扩展,这使得扩展类变得更加容易。 如果您想countChildren成为纯虚拟(或者abstract,如果您更喜欢 Java),并让不同的子类决定如何计算子类怎么办?(并不意味着你总是应该,但你可以。 不过,这是一个单独的问题。

并且不要说“函数调用对性能的影响”。这可能会被优化,特别是如果 getter 是inline或非virtual.

在实际世界中,这是否真的重要取决于有多少其他人将使用您的代码,或者是否知道您的类的数据表示不太可能改变(这有时实际上是一个合理的期望,例如数学向量) .

于 2015-10-25T01:03:43.113 回答
0

我个人的偏见:使用成员函数而不是成员变量。如果您决定以不同的方式表示成员变量,或者使用Pimple idiom将其移动到帮助程序类中,您将需要修改的代码更少。

于 2015-10-25T00:48:44.090 回答