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

时间:2018-02-11 05:33:04

标签: c++

我有一个基类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函数。但我该怎么办?

感谢。

2 个答案:

答案 0 :(得分:0)

只要派生类实例化了一个对象,你就可以做的就是调用基类的构造函数。你可以通过使用类似于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不需要直接访问size中的Base,因为它可以使用现有的内容来处理它。如果您想要更深入的解释和示例,Here是一个非常好的解释。 (滚动约2/3的方式去建设者)

答案 1 :(得分:0)

由于using System.Collections.Specialized; using System.Windows.Controls; namespace UI { public partial class LogView : UserControl { public LogView() { InitializeComponent(); ((INotifyCollectionChanged)LogGrid.Items).CollectionChanged += OnLogViewCollectionChanged; } private void OnLogViewCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (LogGrid.Items.Count > 0) { LogGrid.ScrollIntoView(LogGrid.Items[LogGrid.Items.Count - 1]); } } } } 是基类size中的private变量,因此无法在子类Array中访问它。

有两种方法可以访问子类NumericArray中的size

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

    NumericArray
  2. 在基类protected: int size; 中写一个getter公共函数(GetSize()),返回Array,子类size可以只使用NumericArray每个this link在子类的构造函数中调用此getter公共函数。

    super.GetSize()