使子类能够使用父类的函数?

时间:2013-02-02 16:30:03

标签: c++ sfml

我希望struct MenuItem能够使用HighlightRectOutline。我该怎么做?

Text.h

    class Text {

public:
             ....

    void Text::highlightRectOutline(sf::RenderWindow &window, sf::Color color);

    struct MenuItem {
        public:
            Menu::MenuResult action;
    };

HighlightRectOutline:

void highlightRectOutline(sf::RenderWindow &window, sf::Color color) {
    sf::RectangleShape outlineRect;

    sf::Vector2f size(Text::getWidth(), Text::getHeight());

    outlineRect.setSize(size);
    outlineRect.setPosition(Text::getPosition());

    outlineRect.setFillColor(sf::Color::Transparent);

    outlineRect.setOutlineColor(color);
    outlineRect.setOutlineThickness(5);

    window.draw(outlineRect);
}

这个功能是固定的。滚动下来 Menu.h

class Menu {

    public:
        static enum MenuResult { Exit, Options, Back, ChangeResolution, Play, Nothing };

        MenuResult showMMenu(sf::RenderWindow &window);
        MenuResult showOMenu(sf::RenderWindow &window);

    private:
        MenuResult getMenuResponse(sf::RenderWindow &window);
        MenuResult handleClick(int x, int y);
        Menu::MenuResult Menu::handleButtonHover(sf::RenderWindow &window, Text::MenuItem menuItem, int x, int y);
        std::list<Text::MenuItem> menuItems;

};

handleButtonHover:

Menu::MenuResult Menu::handleButtonHover(sf::RenderWindow &window, Text::menuItem menuItem, int x, int y) {

    sf::Color color(255, 122, 40);

    std::list<Text::MenuItem>::iterator it;

    for(it = menuItems.begin(); it != menuItems.end(); it++)
    {
        sf::floatRect menuItemRect = (*it).getRect();

        if( menuItemRect.contains(x, y)) 
            menuItem.highlightRectOutline(window, color);
    }

    return Nothing;

}

这不能使用getRect或menuItem。

非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

除了不是已经提到的sftrabbit的子类之外,你应该将你的基类'方法声明为受保护的。通过这种方式,它们对于子类是可见的。