派生类构造函数调用基构造函数
derived class constructor call base constructor
我有一个基类 Array 和一个派生类 NumericArray
class Array{//Array.h
private: int size;
public: Array();//Default constructor
Array(int index);// Initialize with size
GetSize();//getter function
};
class NumericArray:public Array
{//NumericArray.h
public: NumericArray();//Default constructor
NumericArray(int index);// Initialize with size
};
我知道如何在 NumericArray 类中调用默认的数组构造函数。但是当涉及到NumericArray(int索引)时,我不知道。由于派生类无法访问基类中的大小,我认为我应该在基类中使用 getter 函数。但是我该怎么办?
谢谢。
由于size
是基类Array
中的private
变量,因此无法在子类NumericArray
中访问它。
有两种方法可以访问子类NumericArray
中的size
:
使
size
成为基类Array
中的受保护变量,并在子类NumericArray
中访问它。protected: int size;
在返回
size
的基类Array
中编写一个getter
公共函数(GetSize()
),子类NumericArray
可以使用此链接super.GetSize()
子类的构造函数中调用此getter
公共函数。public: GetSize() { return size }
您可以做的是在派生类实例化对象时调用基类的构造函数。你可以通过使用类似于 member-init 的东西来相对容易地做到这一点:
class Base
{
private:
int size;
public:
Base(int param) { size = param;}
//rest of the code here
};
class Derived : public Base
{
private:
//other data members
public:
Derived(int param): Derived(param) { //set rest of data}
};
这会param
传递给Base
的构造函数,并让它对它做任何事情。Derived
不需要直接访问Base
中的size
,因为它可以使用已有的内容来处理它。如果你想要一个更深入的解释和例子,这里有一个很好的解释。(滚动大约 2/3 到达构造函数)
相关文章:
- 构造函数正在调用一个使用当前类类型的函数
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在模板化类的构造函数中调用构造函数
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 在成员构造函数之后调用基类构造函数
- 为什么在传递给函数而不是构造函数时调用析构函数?
- 我不知道为什么复制构造函数的调用在 c++ 中不稳定
- 如何构造一个类型特征,可以判断一个类型的私有方法是否可以在另一个类型的构造函数中调用?
- 如何执行参数化构造函数的调用?
- 为什么转换运算符调用复制构造函数两次,而等效函数只调用它一次
- C++构造函数和调用函数
- std::vector 范围构造函数可以调用显式转换吗?
- C++:如何在对象构造过程中调用初始值设定项列表之外的成员构造函数
- 函数中调用的构造函数的顺序
- 从类似构造函数的调用返回模板化智能指针
- 使用范围解析运算符时,在构造函数中调用虚拟方法是否安全?
- 构造函数中调用没有匹配函数 - C++ 11
- GCC __attribute__((constructor)) 在对象构造函数之前调用
- 重载运算符 new(),为什么构造函数被调用两次?