gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:33:28 25 4
gpt4 key购买 nike

我有 2 个类(class)。基础 - Animal 和派生的 MyDog。我想从 setAge 方法更改 ageOfAnimal,然后显示派生类的更改值 - 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();
}

输出:2020

但我想看到的是 20 21。该怎么做?

最佳答案

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

1. 由于 MyDog 派生自 Animal,因此可以简单地:

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

2. 如果您希望ageOfAnimalAnimal 的所有实例都是全局的,您应该将其设为static member。 .

更新

为了反射(reflect)更新后的问题:可以将 getInfo 放入 Animal 类中。然后可以在构造函数中指定猫和狗的默认年龄。更好的方法是在 Animal ctor 中指定年龄并使用 constructor initializer lists用于 MyDogMyAnimal 构造器。

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;

关于c++ - 不能从派生类中获取基类的成员。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50504899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com