派生类构造函数调用基构造函数

derived class constructor call base constructor

本文关键字:构造函数 函数调用 派生      更新时间:2023-10-16

我有一个基类 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

  1. 使size成为基类Array中的受保护变量,并在子类NumericArray中访问它。

    protected: int size;
    
  2. 在返回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 到达构造函数)