使用基类调用派生类

时间:2017-05-02 08:57:04

标签: c++ class base derived

以下是根据布尔值isAdmin创建新用户或新管理对象的代码。用户对象是基础对象,其中admin是从此派生的。我希望能够像使用用户功能一样使用user->adminClasshere。我不确定如何更改它以便用户=新管理员创建管理员而不是用户。

User *user;

if (isAdmin)
{
    user = new Admin();
}
else
{
    user = new User(userLib); //call constructor

}

//User User;
user->loadLibrary();
user->displayLibrary();

1 个答案:

答案 0 :(得分:1)

您正在将多态性与类扩展混淆 在类扩展中,您不能像已经发现的那样使用指向基类的指针来处理扩展类 使用多态,派生类具有相同的接口但具有不同的实现,因此您可以只调用基类的函数,并在使用虚函数时将其调度到实际类的函数。

解决方案是不要这样做:如果你有一个管理员用户,将其视为一种单独的用户,并且不要假装它只是一个具有一些额外功能的普通用户。

不是解决方案,但解决方法是将用户指针强制转换为所需类型并使用新指针。但是,只有在真正需要时才使用它。