实现在派生类上访问类成员静态以及非静态的可能性

时间:2015-03-26 18:24:16

标签: c++ oop static 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();

我知道无法实现虚拟静态功能。 但有没有什么方法可以在一个好的'方式或者这在我的概念中是一个问题吗?

感谢您的帮助!

1 个答案:

答案 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;
    }
};

我希望这可以帮助任何人。如果您有任何问题,请随时提出。