c ++派生类对象没有成员,为什么?

时间:2018-12-16 17:13:50

标签: c++

我的作业中有这个问题。

我有这2个课程:

-用户类别:

   class user
{
protected:
int id;
std::string password;
std::string name;
bool online;
static int usersCounter;
static int onlineCounter;

public:
user(std::string = "user", std::string = "1234");

bool connect(std::string);
void disconnect();
void changePassword(std::string);
void changeName(std::string);
virtual void printInfo();

static int getOnlineNo() 
{
    return onlineCounter;
}

static int getTotalUsers() 
{
    return usersCounter;
}

friend class admin;
};

和一个管理类:

class admin : public user
{
public:
admin(std::string name = "admin", std::string password = "admin"):
    user(name, password){}

void disconnectUser(user&);
void viewUsers( user** );
void printInfo() override;
};

当我尝试制作一个多态对象并从admin调用一个函数(特定于admin的函数,如disconnectUser(...)或viewUsers(...))时,出现错误,因为“类“ user”没有成员“ viewUsers”。

user* usr = new admin();
usr->viewUsers(&usr);//error

这是平常的,我做错了设计吗?还是应该正常工作,我做错了什么?

1 个答案:

答案 0 :(得分:0)

如注释中所指出,如果定义类型A的类,则只能访问该类的公共方法和属性。

对于您来说,viewUsers仅在您使用通用admin类时出现在user类中。

您必须非常小心地使用继承,因为很容易将错误的方法放入类中或进行错误的继承。例如,您确定方法viewUsers必须在admin类内部吗?通常,如果函数不依赖于类,则最好将其放在类之外。