从派生类构造函数调用基类构造函数
Calling the base class constructor from the derived class constructor
我有一个问题:
假设我最初有这些我无法更改的类(假设因为它们取自我正在使用的库):
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;
}
但是,我无法初始化派生类。我的意思是我做了这个继承,所以我可以在我的PetStore
中添加animals
但现在既然sizeF
是私人的,我该怎么做呢?我在想也许在PetStore
默认构造函数中我可以调用Farm()
......所以知道吗?
PetStore
的构造函数将调用 Farm
的构造函数; 有你没有办法阻止它。 如果你什么都不做(就像你所做的那样),它会调用默认构造函数 ( Farm()
);如果需要传递参数,必须在初始值设定项列表中指定基类:
PetStore::PetStore()
: Farm( neededArgument )
, idF( 0 )
{
}
(类似地,PetStore
的构造函数将初始化 sizeF
,通过调用Farm
的构造函数。 类的构造函数总是调用它的所有基类及其所有成员。
首先,PetStore
不是农场。
不过,让我们过去吧。您实际上不需要访问私有成员,您可以在公共接口中拥有所需的一切:
Animal_* getAnimal_(int i);
void addAnimal_(Animal_* newAnimal);
这些是您可以访问的方法,这些是您应该使用的方法。
我的意思是我做了这个继承,所以我可以将动物添加到我的宠物商店,但现在既然 sizeF 是私有的,我该怎么做?
很简单,你叫addAnimal
.它public
,也增加了sizeF
。
另外,请注意
PetStore()
{
idF=0;
};
相当于
PetStore() : Farm()
{
idF=0;
};
即调用基构造函数,初始化基成员。
派生类构造函数已自动调用基类构造函数。在C++中,如果基类具有默认构造函数(不带参数,可以由编译器自动生成!),并且派生类构造函数不在其初始化列表中调用另一个基类构造函数,则将调用默认构造函数。即您的代码等效于:
class PetStore: public Farm
{
public :
PetStore()
: Farm() // <---- Call base-class constructor in initialision list
{
idF=0;
};
private:
int idF;
string nameF;
}
但我无法初始化我的派生类,我的意思是我做了这个继承 所以我可以将动物添加到我的宠物商店,但现在因为 sizeF 是私人的 我能做到吗?所以我在想也许在宠物店默认 构造函数我可以调用农场()...所以任何想法???
不要惊慌。
农场构造函数将自动在宠物商店的构造函数中调用。
请参阅基类继承调用规则:调用超类构造函数的规则是什么?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 在初始化列表之外手动调用基类的构造函数
- 在成员构造函数之后调用基类构造函数
- 如何在具有相同函数名称的派生类中调用基类的函数
- 有没有办法在C++中调用基类的所有子类函数?
- 添加字符串类型的类成员会导致调用基类函数而不是子函数
- 有没有办法调用基类函数,该函数在使用私有继承的派生类中被覆盖?
- 如何在C++中调用基类虚函数
- 调用基类函数时强制使用类名?
- 当派生类无法轻易将参数传递到基类时,如何调用基类构造函数
- 派生类构造函数调用基构造函数
- 在C++中调用基类模板构造函数
- 转发构造函数调用基类的复制构造函数2次
- 派生类构造函数调用基类构造函数
- 从派生类构造函数调用基类构造函数
- 从派生类构造函数调用基类构造函数
- C++:使用函数调用基类中的派生类
- 为什么隐式复制构造函数调用基类复制构造函数,而定义的复制构造函数不调用?
- 如何从派生类复制构造函数调用基类复制构造函数
- 如何在异常时不从构造函数调用基类析构函数