【问题标题】:C++ , variables , abstract/ virtual classC++,变量,抽象/虚拟类
【发布时间】:2015-06-09 12:25:06
【问题描述】:

请帮助我,我对目标 C++ 还很陌生,我不知道如何正确获取变量 inicjatywa。 我不知道出了什么问题。我可能不完全理解虚拟和抽象类,所以我很乐意解释我的错误。 我希望程序使用 Organizmy 类中的指针从我的对象 Wolf 输出 inicjatywa 的值(值 = 5)。

class Organizmy
{
public:
int inicjatywa;
virtual void akcja() = 0;
virtual void kolizja() = 0;
virtual void rysowanie() = 0;
virtual ~Organizmy(){};
};

class Animal: public Organizmy
{
public:
    int inicjatywa;
    virtual void akcja() = 0;
    virtual void kolizja() = 0;
    virtual void rysowanie() = 0;
    virtual ~Animal(){};

};

class Wolf: public Animal
{
public:
    int inicjatywa;

    Wolf(){
        cout << "Crate Wolf" << endl;
        this->inicjatywa = 5;
    };
    ~Wolf(){};
    void akcja(){};
    void kolizja(){};
    void rysowanie(){
        cout << "W" << endl;
        cout << this->inicjatywa << endl; // here he output 5 
    };
};
int main()
{
    Organizmy *b;     // I create new poiter; type Organizmy
    b=new Wolf();     // He is now pointing new object Wolf
    b->rysowanie();   // here he outputs correct value of the new elemnt 
    cout<<b->inicjatywa<< endl; //but here the code outputs -8421.... 
                                //and it should be 5 not -8421....

}

【问题讨论】:

  • ???请阅读编辑帮助(编辑器中的问号显示),尤其是关于格式化代码的部分。我不知道你的问题可能是什么?
  • Objective-C 或 C++。究竟是哪一个? “而且我不知道如何正确获取变量 inicjatywa ...” 我什至没有正确理解它的语义,所以我应该如何帮助?
  • 英文版minimal sample code,以及对您的特定错误消息/输入/预期输出的描述将大大改善您的问题。
  • 感谢您提供如何正确提问的建议,这是我的第一个问题,所以我会改进,但我仍然需要帮助;/
  • @Bliseq 嗯,你已经有机会改进这个了,按照我给你的建议编辑它。

标签: c++ virtual abstract


【解决方案1】:

一些事情。首先命名你的函数是明智的,这些名字是胡言乱语,对这里的任何人都没有任何意义。

第二,你的错误很简单。 “Wolf”和“Animal”类不需要重新声明“inicjatywa”,只要他们声明他们对“Organizmy”的继承是公开的(就像他们一样),“外部世界”将看到所有公开的元素的“组织”。代码将如下所示:

class Organizmy
{
public:
    int inicjatywa;
    virtual void akcja() = 0;
    virtual void kolizja() = 0;
    virtual void rysowanie() = 0;
    virtual ~Organizmy(){};
};

class Animal: public Organizmy
{
    public:
    virtual void akcja() = 0;
    virtual void kolizja() = 0;
    virtual void rysowanie() = 0;
    virtual ~Animal(){};
};

class Wolf: public Animal
{
public:

    Wolf(){
        cout << "Crate Wolf" << endl;
        inicjatywa = 5;
    };
    ~Wolf(){};
    void akcja(){};
    void kolizja(){};
    void rysowanie(){
        cout << "W" << endl;
        cout << inicjatywa << endl; // here he output 5 
    };
};
int main()
{
    Organizmy *b;     // I create new poiter; type Organizmy
    b=new Wolf();     // He is now pointing new object Wolf
    b->rysowanie();   // here he outputs correct value of the new elemnt 
    cout<<b->inicjatywa<< endl; //but here the code outputs -8421.... 
                            //and it should be 5 not -8421....
}

【讨论】:

  • 非常感谢,我很抱歉这些名字,我用我的母语编程,下次我会努力的更好。如果我需要帮助,下次还有什么需要考虑的吗?
  • 啊,是的,那会更有意义....想一想,我想我从来没有见过用英语以外的东西编写的代码....唯一另一件事我会说它不要过度使用虚函数(看起来你不是在这里) 例如,假设你有一个“getWeigth()”函数。这对于所有 Organizmy 对象都是相同的,并且不需要重载,因为实现在 Wolf、Animal 和 Organizmy 之间共享。您在提供的代码中使用 virtual 似乎就足够了。
猜你喜欢
  • 2013-06-19
  • 2014-08-16
  • 1970-01-01
  • 2011-11-21
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 2014-10-13
相关资源
最近更新 更多