我有一个基类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函数。但我该怎么办?
感谢。
答案 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
:
使NumericArray
成为基类size
中的受保护变量,并在子类Array
中访问它。
NumericArray
在基类protected: int size;
中写一个getter
公共函数(GetSize()
),返回Array
,子类size
可以只使用NumericArray
每个this link在子类的构造函数中调用此getter
公共函数。
super.GetSize()