繁体   English   中英

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

[英]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类中调用默认的Array构造函数。 但是,当涉及到NumericArray(int index)时,我不知道。 由于派生类无法访问基类中的大小,因此我认为我应该在基类中使用getter函数。 但是我该怎么办?

谢谢。

只要派生类实例化了对象,您就可以调用基类的构造函数。 您可以通过使用类似于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左右)

由于size是基类Arrayprivate变量,因此无法在子类NumericArray对其进行访问。

在子类NumericArray中,有两种访问size方法:

  1. 在基类Array中将size为受保护的变量,并在子类NumericArray对其进行访问。

     protected: int size; 
  2. 在返回size的基类Array中编写一个getter公共函数( GetSize() ),然后子类NumericArray可以通过此链接使用super.GetSize()在子类的构造函数中调用此getter公共函数。

     public: GetSize() { return size } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM