更改派生对象中的基础对象
Posted
技术标签:
【中文标题】更改派生对象中的基础对象【英文标题】:Change base object in derived object 【发布时间】:2017-04-29 14:31:46 【问题描述】:在我的一个类GUI
中,我有一个类User u
的私有变量。在这个GUI
类中,我有一个功能供用户登录,然后检查他们的帐户是管理员还是普通用户,然后从中创建User
或Admin
对象。管理员派生自具有更多权限的用户。我如何在他们登录后将私有变量User u
设置为Admin
对象或User
对象。
【问题讨论】:
阅读您最喜欢的 C++ 书籍中的多态性。 【参考方案1】:如果Admin
类扩展了User
类,那么您可以使用User u
来表示它们。
当您只需要管理员并且您不知道 u
是 Admin
还是 User
对象时,您可以在运行时像这样检查它:
if(Admin * v = dynamic_cast<Admin*>(u))
// u was safely casted to Admin
v->doSomething();
注意
dynamic_cast
是一项成本很高的操作,您可以阅读 here 一些解决方法。
【讨论】:
我没有投票,但提议的解决方案不会导致代码具有良好/干净的架构。当然,管理员“是”用户,但给不同的用户不同的“角色”可能会更好。 @DanielJour 我不是在评判架构。我正在回答问题的要求。在问题中写着 Admin 来自用户以上是关于更改派生对象中的基础对象的主要内容,如果未能解决你的问题,请参考以下文章