C ++,变量,抽象/虚拟类

时间:2015-04-04 16:21:22

标签: c++ virtual abstract

请帮助我,我是客观C ++的新手,我不知道如何正确地获取变量inicjatywa。 我不知道出了什么问题。有可能我不完全理解虚拟和抽象类,所以我会很好地解释我的错误。 我希望程序使用Organizmy类中的指针从我的对象Wolf输出inicjatywa(value = 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....

}

1 个答案:

答案 0 :(得分:1)

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

其次,你的错误很简单。 “狼”和“动物”课程不需要重新声明“inicjatywa”,只要他们宣布他们继承“组织”是公开的(因为他们有)“外部世界”将看到所有的公共元素“组织”代码如下所示:

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