如果我派生類叫做PeekingIterator
,而基類叫Iterator
。派生類重用基類的成員和成員函數。現在在C++中,繼承不會繼承私有成員。C++,關於繼承的基礎知識
但在下面的例子中,struct Data
和Data* data
是私人會員!所以我的問題是:我們如何在派生類PeekingIterator
內部調用Iterator::hasNext()
函數,它甚至不會繼承struct data
和Data* data
!?
// Below is the interface for Iterator, which is already defined for you.
// **DO NOT** modify the interface for Iterator.
class Iterator {
struct Data;
Data* data;
public:
Iterator(const vector<int>& nums);
Iterator(const Iterator& iter);
virtual ~Iterator();
// Returns the next element in the iteration.
int next();
// Returns true if the iteration has more elements.
bool hasNext() const;
};
class PeekingIterator : public Iterator {
public:
PeekingIterator(const vector<int>& nums) : Iterator(nums) {
// Initialize any member here.
// **DO NOT** save a copy of nums and manipulate it directly.
// You should only use the Iterator interface methods.
}
// Returns the next element in the iteration without advancing the iterator.
int peek() {
}
// hasNext() and next() should behave the same as in the Iterator interface.
// Override them if needed.
int next() {
}
bool hasNext() const {
}
我沒有看到問題,調用'Iterator :: hasNext()'應該可以正常工作..有什麼問題嗎? – HazemGomaa
繼承DOES包括繼承私人成員。他們只是無法訪問。如果您希望基類影響它們,請提供public/protected成員函數以對其執行必需的操作(可由派生類使用)。您可以提供其他功能,爲私人成員提供指針或引用(通過這些功能,私人可以隨後進行更改),但是 - 如果您這樣做 - 則可以讓成員公開並完成它。 – Peter
愚蠢的問題,如果我在'main'聲明'PeekingIterator pi',我能夠調用基類函數,比如'pi.Iteratorr :: hasNext()'嗎? –