不能从派生类中获取基类的成员。 C ++

时间:2018-05-24 08:47:19

标签: c++

我有2节课。基础 - Animal和派生MyDog。我想从ageOfAnimal方法更改setAge,然后在派生类中显示更改的值 - MyDog

代码:

#include <iostream>
#include <string>

using namespace std;
class Animal
{
 public:
 int ageOfAnimal = 0;
 int setAge(int age) {
    ageOfAnimal = age;
    return ageOfAnimal;
 }
};

class MyDog: public Animal
{
 public:
    void getInfo() {
    cout << ageOfAnimal;
    }

};

int main()
{
   Animal *animal = new Animal;
   animal->setAge(20);
   MyDog myDog;
   myDog.getInfo();

   return 0;
}

输出:0

为什么我得不到20?这甚至可以吗?

更新
谢谢你的答案,但我想要的是从不同的对象

更改ageOfAnimal属性的状态
class Animal
{
  public:
  int ageOfAnimal = 0;
  int setAge(int age) {
    ageOfAnimal += age;
    return ageOfAnimal;
  }
}

class MyCat: public Animal
{
 public:
  void getInfo() {
  cout << ageOfAnimal;
 }
}


class MyDog: public Animal
{
 public:
     void getInfo() {
     cout << endl << ageOfAnimal;
    }
}
int main() {
 myDog dog;
 dog.getInfo();
 MyCat cat;
 cat.getInfo();
}

输出: 20 20

但我想看到的是什么20 21.如何做到这一点?

1 个答案:

答案 0 :(得分:2)

在使用代码中有两个不同的对象:Animal * animalMyDog myDog。两个对象都有自己的ageOfAnimal实例:在一个对象中更改它不会修改第二个对象(这是预期的行为)。

1。由于MyDog源自Animal,所以可以简单地说:

MyDog myDog;
myDog.setAge(20);
myDog.getInfo();

2。如果您希望ageOfAnimalAnimal的所有实例设为全局,则应将其设为enter image description here

<强>更新

要反映更新的问题:可以将getInfo放入Animal课程。然后可以在构造函数中指定猫和狗的默认年龄。 更好的方法是在Animal ctor中指定年龄,并对MyDogMyAnimal ctors使用static member

class Animal
{
public:
   int ageOfAnimal = 0;
   int setAge(int age)
   {
      ageOfAnimal += age;
      return ageOfAnimal;
   }
   void getInfo()
   {
      cout << endl << ageOfAnimal;
   }
};

class MyCat : public Animal
{
public:
    MyCat()
    {
        setAge(40);
    }
};

class MyDog : public Animal
{
public:
    MyDog()
    {
        setAge(20);
    }
};

int main()
{
   MyDog dog;
   dog.getInfo();
   MyCat cat;
   cat.getInfo();
}

输出:

20
40

或者,如果您希望在所有对象之间共享年龄,请按照之前的建议将其设为静态成员:

class Animal
{
public:
   static int ageOfAnimal;
   int setAge(int age)
   {
      ageOfAnimal += age;
      return ageOfAnimal;
   }
   void getInfo()
   {
      cout << ageOfAnimal;
   }
};

// Initialize age
int Animal::ageOfAnimal = 0;
相关问题