返回指向 class 成员的指针 - 我应该避免它吗?
Returning pointer to class member - should I avoid it?
我没有编程方面的经验,所以我想问问你的意见。例如我有 3 classes:
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;
};
这是一种不好的做法吗?我知道我可以在 class B 和 return 中使用方法 sumSize() 和 return,但是我可以用这种方式来做还是在更大的程序中会出现并发症?
所以这是我的主要问题:
- 我是否应该避免 returning 指向成员的指针:
A* getChild(int
childNumber);
- 引用 children 的所有内容都应该计算
在 class B?
我相信您描述的是容器设计模式,它备受推崇且有用。作为设计者,如果您决定成员函数是 public,那么您打算让 "outside world" 访问它们,而该决定取决于您要完成的任务。
也许你不想让外界修改这个成员,所以也许const A* getChild(int childNumber)
可能就是你想要的。
在设计时考虑"const-ness"是一个好习惯,你的例子中的所有三个public成员函数都可以是const(例如int getSize() const
)而不影响您展示的功能。
这里的一个错误是使用 operator
作为私有数据成员的名称。 operator
是 C++ 中的保留关键字。
我没有编程方面的经验,所以我想问问你的意见。例如我有 3 classes:
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;
};
这是一种不好的做法吗?我知道我可以在 class B 和 return 中使用方法 sumSize() 和 return,但是我可以用这种方式来做还是在更大的程序中会出现并发症? 所以这是我的主要问题:
- 我是否应该避免 returning 指向成员的指针:
A* getChild(int childNumber);
- 引用 children 的所有内容都应该计算 在 class B?
我相信您描述的是容器设计模式,它备受推崇且有用。作为设计者,如果您决定成员函数是 public,那么您打算让 "outside world" 访问它们,而该决定取决于您要完成的任务。
也许你不想让外界修改这个成员,所以也许const A* getChild(int childNumber)
可能就是你想要的。
在设计时考虑"const-ness"是一个好习惯,你的例子中的所有三个public成员函数都可以是const(例如int getSize() const
)而不影响您展示的功能。
这里的一个错误是使用 operator
作为私有数据成员的名称。 operator
是 C++ 中的保留关键字。