gpt4 book ai didi

C++ - 在内部,当定义一个类的成员函数时,应该使用成员变量名还是它的 getter 函数?

转载 作者:行者123 更新时间:2023-11-28 06:00:50 29 4
gpt4 key购买 nike

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

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

在需要使用私有(private)成员变量的类中定义公共(public)成员函数时,每个成员变量(私有(private)变量)都有公共(public)成员“getter”函数(请不要回答说“丢失 getters/setters...”,我正在使用它们),使用 this->m_variable 或使用 this->m_variable 或者使用这个->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 循环遍历子数组时,定义每个 Person* 会更好吗?在当前迭代中使用 *(this->children + i)或者使用 *(this->getChild() + i);

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

最佳答案

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

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

通过扩展,这使得扩展类变得更加容易。 如果您希望countChildren 是纯虚拟的(或者abstract,如果您更喜欢Java),并让不同的子类决定如何计算子类怎么办? (并不意味着您总是应该,但您可以That's a separate issue, though.)

并且不要说“函数调用对性能造成影响”。这可能会被优化掉,尤其是当 getter 是inline 或非virtual 时。

在实际世界中,这是否真的很重要取决于有多少人会使用你的代码,或者是否知道你的类的数据表示不太可能改变(这有时实际上是一个合理的期望,比如数学 vector )。

关于C++ - 在内部,当定义一个类的成员函数时,应该使用成员变量名还是它的 getter 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324913/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com