2015-04-04 66 views
-4

请帮助我,我很新的客观C++,我不知道如何正确地得到变量inicjatywa。 我不知道什么是错的。有可能我没有完全理解虚拟课堂和抽象课堂,所以我会很乐意解释我的错误。 我希望程序使用Organizmy类的指针从我的对象Wolf中输出inicjatywa(value = 5)的值。C++,变量,抽象/虚拟类

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.... 

} 
+0

???请阅读编辑帮助(编辑器中的问号显示它),尤其是关于格式化代码的部分。我不知道你的问题可能是什么? – Deduplicator 2015-04-04 16:23:43

+0

Objective-C或C++。哪一个实际上? _“,我不知道如何正确地得到变量inicjatywa ...”_我没有正确地理解它的语义,所以我应该如何帮助? – 2015-04-04 16:25:31

+0

英文中的[最小示例代码](http://stackoverflow.com/help/mcve),以及对特定错误消息/输入/预期输出的描述将大大改善您的问题。 – 2015-04-04 16:33:34

回答

1

有几件事。首先将你的功能命名为明智的事情,这些名称是乱码,对这里的任何人都没有任何意义。

二,你的错误很简单。 “狼”和“动物”类不需要重新宣布“in​​icjatywa”,只要他们宣布继承“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.... 
} 
+0

非常感谢,我为这些名字感到抱歉,我用我的母语进行编程,下次我会尝试更好下次有什么我应该想到的,如果我想获得帮助? – Bliseq 2015-04-04 17:10:38

+0

啊,是的,那样会更有意义....来想一想,我不认为我曾经见过用英文以外的东西写的代码....我唯一会说的是不要过度使用虚函数(它并不表示你在这里)作为一个例子,假设你有一个“getWeigth()”函数。这对所有Organizmy对象都是一样的,并且不需要重载,因为实现是在Wolf,Animal和Organizmy之间共享的。您在提供的代码中使用虚拟似乎已经足够。 – 2015-04-05 18:35:10