假设我有一个简单的复合模式结构:

  • 抽象类User
  • 叶子类PersonalUser
  • GroupUser容器作为其成员变量
  • 的复合类std::vector<User*> users
    以及bool GroupUser::findUser(User* u)方法,如果在true容器(自然包含其他uusers对象组成)中找到了用户PersonalUser,则返回GroupUser的方法

    现在,我当然想递归地定义该函数,因此我需要遍历User vector 中的每个users,并与u进行比较,但是我不知道UserPersonalUser还是GroupUser,所以我的问题是:

    我是否必须定义一个虚函数char User::returnType()来告诉我它是哪种User类型,或者是否有更好/更智能的方法来查找树并寻找User

    ps当然有像bool areEqual(User*, User*)这样的方法,我们可以通过它比较用户:)

    最佳答案

    您可以将FindUser成员函数作为虚拟函数添加到抽象类User中,如果要搜索的用户是当前用户(个人或组),则使其返回true。

    在GroupUser中,如果要搜索的用户不是当前的GroupUser,则可以覆盖FindUser并将任何调用委派给所有包含的Users。

    10-08 04:11