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

时间:2016-03-06 22:00:56

标签: 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 childNumber);
  2. 所有涉及儿童的东西都应该计算     在B级?

1 个答案:

答案 0 :(得分:2)

我相信你正在描述一个容易受到尊重和有用的容器设计模式。作为设计师,如果您决定成员函数是公开的,那么您打算让“外部世界”访问它们,而这个决定取决于您要完成的任务。

也许您不希望外部世界修改此成员,因此const A* getChild(int childNumber)可能就是您想要的。

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

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