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

Making a subclass be able to use the parent class's functions?

本文关键字:函数 父类 子类 能够使      更新时间:2023-10-16

我希望结构体 MenuItem 能够使用 HighlightRectOutline。我该怎么做?

文本.h

    class Text {
public:
             ....
    void Text::highlightRectOutline(sf::RenderWindow &window, sf::Color color);
    struct MenuItem {
        public:
            Menu::MenuResult action;
    };

亮点矩形轮廓:

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);
}

此函数是固定的。向下滚动菜单.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;
};

手柄按钮悬停:

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。

帮助将不胜感激。

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