C++、变量、抽象/虚拟 class
C++ , variables , abstract/ virtual class
请帮助我,我是 objective C++ 的新手,我不知道如何正确访问变量 inicjatywa。
我不知道出了什么问题。可能我不完全理解虚拟和抽象 classes 所以我会很高兴解释我的错误。
我希望程序使用来自 Organizmy class.
的指针从我的对象 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....
}
几件事。首先为您的函数命名,这些名称是胡言乱语,对这里的任何人都没有任何意义。
其次,你的错误很简单。 "Wolf" 和 "Animal" class 不需要重新声明 "inicjatywa," 只要他们声明他们对 "Organizmy" 的继承是 public (因为他们有) 'outside world' 将看到 "Organizmy." 的所有 public 元素代码将如下所示:
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....
}
请帮助我,我是 objective C++ 的新手,我不知道如何正确访问变量 inicjatywa。 我不知道出了什么问题。可能我不完全理解虚拟和抽象 classes 所以我会很高兴解释我的错误。 我希望程序使用来自 Organizmy class.
的指针从我的对象 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....
}
几件事。首先为您的函数命名,这些名称是胡言乱语,对这里的任何人都没有任何意义。
其次,你的错误很简单。 "Wolf" 和 "Animal" class 不需要重新声明 "inicjatywa," 只要他们声明他们对 "Organizmy" 的继承是 public (因为他们有) 'outside world' 将看到 "Organizmy." 的所有 public 元素代码将如下所示:
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....
}