我有以下课程。
// My baseclass
class Item {
public:
virtual const std::string GetItemName() = 0;
};
// My derived class
class Shovel : public Item {
private:
static const std::string _ITEM_NAME = "tool_shovel";
public:
const std::string GetItemName(){
return _ITEM_NAME;
}
}
有了这个,我可以访问我的Item
对象的名称,如下所示:
Item* myItem = new Shovel();
myItem.GetItemName(); // Returns "tool_shovel" ofcourse
我现在也想要访问一个项目的名称而没有像这样的实例。
Shovel::GetItemName();
我知道无法实现虚拟静态功能。 但有没有什么方法可以在一个好的'方式或者这在我的概念中是一个问题吗?
感谢您的帮助!
答案 0 :(得分:0)
我不知道可以直接从实例调用静态函数,所以我现在用2种方法解决了我的问题。 一个公共静态函数,所以我可以随时获取项目的名称。另一个私有的非静态函数让baseclass获取当前项的名称。
以下是代码:
// My baseclass
class Item {
protected:
virtual const std::string _GetItemName() = 0;
};
// My derived class
class Shovel : public Item {
private:
static const std::string _ITEM_NAME = "tool_shovel";
protected:
const std::string _GetItemName(){
return _ITEM_NAME;
}
public:
static const std::string GetItemName(){
return _ITEM_NAME;
}
};
我希望这可以帮助任何人。如果您有任何问题,请随时提出。