c++ - c++派生类对象没有成员,为什么?
问题描述
我的作业中有这个问题。
我有这两个课程:
-一个用户类:
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(...))时,我收到错误,因为“类“用户”没有成员“viewUsers ”。
user* usr = new admin();
usr->viewUsers(&usr);//error
这是常见的事情,我做了一个错误的设计,还是它应该工作,我做错了什么?
解决方案
正如评论中所指出的,如果您定义一个类型的类,A
您只能访问该类的公共方法和属性。
在您的情况下,viewUsers
仅在admin
您使用泛型user
类时出现在类中。
您必须非常小心地使用继承,因为很容易在类中放置错误的方法或进行错误的继承。例如,您确定方法viewUsers
必须在admin
类中吗?通常,如果一个函数不依赖于类,最好把它放在类之外。
推荐阅读
- html - Youtube 和 Twitter 的 HTML href “拒绝连接”
- unity3d - 我正在尝试将标准 URP(通用渲染管道)着色器提供给我制作的网格
- pandas - 如何在熊猫中格式化日期时间字段
- php - PHP 在 LAMP DigitalOcean 中返回任何内容
- vim - 字符串中的语法高亮
- sql - 每当我尝试在 SQL 中进行除法时,我都会得到 0(我该如何解决这个问题)?
- r - 通过倾斜对 facet_wrap 中的直方图进行排序
- asp.net-mvc - 如何在会话中发送参数?
- prose-mirror - 如何替换 ProseMirror 中当前选定的内容
- r - 分组后加入data.table