gpt4 book ai didi

c++ - 从派生类构造函数调用基类构造函数

转载 作者:IT老高 更新时间:2023-10-28 12:55:17 26 4
gpt4 key购买 nike

我有一个问题:

假设我最初有这些我无法更改的类(假设是因为它们取 self 正在使用的库):

class Animal_
{
public:
Animal_();
int getIdA()
{
return idA;
};
string getNameA()
{
return nameA;
}
private:
string nameA;
int idA;
}

class Farm
{
public :
Farm()
{
sizeF=0;
}
Animal_* getAnimal_(int i)
{
return animals_[i];
}
void addAnimal_(Animal_* newAnimal)
{
animals_[sizeF]=newAnimal;
sizeF++;
}

private:
int sizeF;
Animal_* animals_[max];
}

但后来我需要一个只添加几个字段的类,所以我这样做了:

class PetStore : public Farm
{
public :
PetStore()
{
idF=0;
};
private:
int idF;
string nameF;
}

但是,我无法初始化我的派生类。我的意思是我做了这个继承,所以我可以将 animals 添加到我的 PetStore 但现在由于 sizeF 是私有(private)的,我该怎么做呢?我在想也许在 PetStore 默认构造函数中我可以调用 Farm()...所以有什么想法吗?

最佳答案

PetStore的构造函数会调用Farm的构造函数;有你没有办法阻止它。如果你什么都不做(就像你所做的那样),它会调用默认构造函数(Farm());如果你需要传递参数,您必须在初始化列表中指定基类:

PetStore::PetStore()
: Farm( neededArgument )
, idF( 0 )
{
}

(同样,PetStore 的构造函数会初始化sizeF,通过调用Farm的构造函数。类的构造函数总是调用的构造函数它的所有基类及其所有成员。)

关于c++ - 从派生类构造函数调用基类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10282787/

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