2015-10-25 50 views
0

如果问题标题没有有效地(或根本)反映我的实际问题,我表示歉意;这是我第一次问或回答有关计算器和可能出了差错......C++ - 在定义类的成员函数时,内部应该使用成员变量名还是其getter函数?

无论如何,我的(阐述)的问题是:

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

我已经包含下面的代码示例(创建一个名为家庭的一类),从项目,我目前的工作,试图澄清正是我的意思:

片段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... 
} 

所以,现在对于t他的问题在这个例子中改变了:

countChildren(gender g)函数的定义中,如果我有i < this->numChildren;,那么使用i < this->countChildren();会更好一些(就我之前陈述的度量而言)? 类似地,当迭代同一个for循环的children数组时,使用*(this->children + i)或使用*(this->getChild() + i);来定义当前迭代中的每个Person*会更好吗?

预先感谢您的任何帮助,我很抱歉,如果这个问题太“基于讨论”的stackoverflow,正如我前面提到的,这我第一次问一个问题。

+0

我不太理解;你的意思是“我应该通过变量还是内部人员来引用内部成员”? (另外,欢迎,你已经比那些要求作业解决方案的人更好!) – JesseTG

+0

谢谢,是的,这正是我的意思。我试图快速编辑标题以更好地反映我的问题的目的。 – Steven94

回答

0

在理想的世界里,你总是在内部使用getter来引用逻辑属性。只有当这些属性被公开曝光时,这才真正重要;如果您发现自己写了一个仅用于实现细节的获取器,请停止编码并获得一杯咖啡,然后想想自己在做什么。

为什么在内部使用getter? 出于同样的原因,您可以在任何其他地方使用它们;他们更能适应你班级表现的变化。除此之外,不仅仅是其他代码获得好处,它也是这个类。

通过扩展,这可以更容易地扩展类。 如果你想让countChildren成为纯虚拟(或abstract,如果你更喜欢Java),并让不同的子类决定如何计算孩子?(并不意味着你总是应该,但你可以That's a separate issue, though.

不要说“从函数调用的性能损失”。这可能会被优化,特别是如果吸气剂是inline或非virtual

在实际应用中,这个问题真的很重要取决于有多少人会使用你的代码,或者如果知道你的类的数据表示不太可能改变(这有时是一个合理的期望,就像对于数学向量)。

0

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

相关问题