【问题标题】:C++ and Sfml inheritance doesn't workC++ 和 Sfml 继承不起作用
【发布时间】:2016-04-17 16:00:15
【问题描述】:

我有一个继承问题。

class z
{
public:
    sf::RectangleShape rect1;
    int a ;

    z()
    {
       rect1.setFillColor(sf::Color::Red);
       rect1.setSize(sf::Vector2f(100,100));
        a = 5;
    }

    void movement()
    {
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
        {

            rect1.move(1, 0);
            a = 6;

        }
    }  
};

class c : public z
{
public:
    void write()
    {
        std::cout << a;
    }
};

int main(int, char const**)
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");

    z zclass;
    c cclass;

    while (window.isOpen())
    {

        zclass.movement();
        cclass.write();
        window.clear();
        window.draw(zclass.rect1);
        window.display();
    }

}

当我按右键时,“a”变量总是相同的结果 =“5”。它应该是“6”。我做错了什么?

【问题讨论】:

    标签: c++ inheritance sfml


    【解决方案1】:

    cclass是一个独立的对象,独立于zclass,所以他们有独立的成员变量。

    尝试删除z zclass;并将zclass.movement();更改为cclass.movement();

    【讨论】:

    • 它的工作,但在释放正确的关键值再次去 5
    • @caatayk 你的意思是a的值应该在key被释放的时候变成5?修改您的代码以执行您想要的行为。
    【解决方案2】:

    其实很自然,让我们来探究一下原因:

    z zclass;   //that's an instance of the z class
    
    c cclass;   //that's an instance of the c class
    

    它们都是独立的意味着如果你想象你的记忆它同时拥有, 两者都有自己的“a”作为成员 所以确实你“告诉” z 移动:

     zclass.movement();
    

    但 cclass 从未移动,因为 a 是两者的公共成员,您可以检查

     std::cout << "zclass's a: " << zclass.a <<"\ncclasss's a: " << cclass.a;
    

    将产生: zclass的a:6 cclass 的 a: 5

    notice that you want to make cclass move: 表示你需要写

    cclass.movement(); 现在我们已经对 cclass 中的 z 部分说“heya budd move ur ass so a=6”

    关于编码的更多内容。不是所有的东西都应该有公共访问权这样想: public - 每个人都可以访问,也许 a 是您游戏中的一些核心内容,例如角色金币或 xp,您真的希望其他人更改它吗?

    private - 只有当前类可以使用它,我们甚至不允许从我们继承的类访问这些重要数据。

    受保护 - 我和从我继承的人都可以使用这些数据

    类继承意味着 c 包含 z 对象的一部分,就像 c 有它自己的部分,而它的一部分是 z

    现在当你做类似的事情时 z z1,z2;它们完全不同,就像你做的那样 int a,b 他们是不同的 如果你做 a=3; b 不是 3

    我建议在学习像 sfml 之类的库之前先阅读一些有关 c++ 主题的书籍并与他们合作 :)

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2016-06-11
      • 2013-04-24
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      相关资源
      最近更新 更多