假设我有一个简单的复合模式结构:
User
PersonalUser
GroupUser
容器作为其成员变量std::vector<User*> users
以及
bool GroupUser::findUser(User* u)
方法,如果在true
容器(自然包含其他u
或users
对象组成)中找到了用户PersonalUser
,则返回GroupUser
的方法现在,我当然想递归地定义该函数,因此我需要遍历
User
vector 中的每个users
,并与u
进行比较,但是我不知道User
是PersonalUser
还是GroupUser
,所以我的问题是:我是否必须定义一个虚函数
char User::returnType()
来告诉我它是哪种User
类型,或者是否有更好/更智能的方法来查找树并寻找User
?ps当然有像
bool areEqual(User*, User*)
这样的方法,我们可以通过它比较用户:) 最佳答案
您可以将FindUser成员函数作为虚拟函数添加到抽象类User中,如果要搜索的用户是当前用户(个人或组),则使其返回true。
在GroupUser中,如果要搜索的用户不是当前的GroupUser,则可以覆盖FindUser并将任何调用委派给所有包含的Users。