我的作业中有这个问题。
我有这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
这是平常的,我做错了设计吗?还是应该正常工作,我做错了什么?
答案 0 :(得分:0)
如注释中所指出,如果定义类型A
的类,则只能访问该类的公共方法和属性。
对于您来说,viewUsers
仅在您使用通用admin
类时出现在user
类中。
您必须非常小心地使用继承,因为很容易将错误的方法放入类中或进行错误的继承。例如,您确定方法viewUsers
必须在admin
类内部吗?通常,如果函数不依赖于类,则最好将其放在类之外。