c++ - 返回指向类成员的指针——我应该避免它吗?

标签 c++ oop coding-style

我没有编程方面的经验,所以我想问问你的意见。例如我有 3 个类:

class A
{
public:
   A(int size);
   int getSize();
private:
   int size_;
};

class B
{
public:
   A* getChild(int childNumber);
   int getNChildren()
   {
      return children.size();
   }
private:
   std::vector<A> children;
};

class C
{
public:
   void sumSize()
   {
       int sum = 0;
       for(int i = 0; i < member.getNChildren(); i++)
       {
            sum += member.getChild(i)->getSize(); // here I wonder if this is good style
       }
   }

private:
  B member;
};

这是一种不好的做法吗?我知道我可以在 B 类中使用方法 sumSize() 并返回这个总和,但是我可以用这种方式来做还是在更大的程序中会出现并发症? 所以这是我的主要问题:

  1. 我是否应该避免返回指向成员的指针:A* getChild(int child 编号);
  2. 所有涉及 child 的东西都应该计算 在 B 类?

最佳答案

我相信您描述的是容器设计模式,它备受推崇且有用。作为设计者,如果您决定成员函数是公开的,那么您打算让“外部世界”访问它们,而该决定取决于您要实现的目标。

也许你不希望外界修改这个成员,所以也许 const A* getChild(int childNumber) 可能是你想要的。

在设计时考虑“const-ness”是一个好习惯,您示例中的所有三个公共(public)成员函数都可以是 const(例如 int getSize() const)而不影响您所展示的功能。

这里的一个错误是使用 operator 作为私有(private)数据成员的名称。 operator 是 C++ 中的保留关键字。

关于c++ - 返回指向类成员的指针——我应该避免它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35833135/

相关文章:

C++类组合,为什么不调用构造函数?

c++ - 将结构视为数据类型是否准确?

python - 复杂单行的最佳 python 样式

TDD:可以在增强现有大型应用程序时进行引导吗?

php - 编码标准和行长

c++ - 使用 Windows 注册表查找下一个 "Daylight Saving Time"

c++ - vector 指针导致 valgrind 内存泄漏

c# - C# 中的常量列表

javascript - Angular/Typescript——通过示例解释接口(interface)的好处

C# 通过添加属性扩展类