关于c ++:派生类构造函数调用基础构造函数


derived class constructor call base constructor

我有一个基类数组和一个派生类数字数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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类中的默认数组构造函数。但说到数字数组(int index),我不知道。由于派生类不能访问基类中的大小,我认为应该在基类中使用getter函数。但我该怎么办呢?

谢谢。


由于size是基类Array中的private变量,因此无法在子类NumericArray中访问。

有两种方法可以访问儿童类中的sizeNumericArray

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

    1
    protected: int size;

  • 在返回size的基类Array中编写一个getter公共函数(GetSize(),子类NumericArray只需在使用super.GetSize()的子类的构造函数中调用这个getter公共函数即可。

    1
    2
    public:
        GetSize() { return size }

  • 只要派生类实例化了一个对象,就可以调用基类的构造函数。通过使用类似于member init的方法,可以相对容易地做到这一点:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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的方法到达构造器)