实现在派生的 class 上访问 class 成员静态和非静态的可能性
Implement possibility to access class member static as well as non-static on a derived class
我有以下 类.
// 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();
我知道不可能实现虚拟静态功能。
但是有没有什么办法可以 'nice' 的方式来实现这个,或者这在我的概念中更像是一个问题?
感谢您的帮助!
我不知道可以直接从实例调用静态函数,所以我现在用两种方法解决了我的问题。
一个 public 静态函数,所以我可以随时获取项目的名称。以及另一个私有非静态函数,让基类获取当前项的名称。
代码如下:
// 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;
}
};
我希望这对任何人都有帮助。如果您有任何问题,请随时提出。
我有以下 类.
// 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();
我知道不可能实现虚拟静态功能。 但是有没有什么办法可以 'nice' 的方式来实现这个,或者这在我的概念中更像是一个问题?
感谢您的帮助!
我不知道可以直接从实例调用静态函数,所以我现在用两种方法解决了我的问题。 一个 public 静态函数,所以我可以随时获取项目的名称。以及另一个私有非静态函数,让基类获取当前项的名称。
代码如下:
// 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;
}
};
我希望这对任何人都有帮助。如果您有任何问题,请随时提出。