Wenn ich die Klasse PeekingIterator
abgeleitet habe, und die Basisklasse Anruf Iterator
. Die abgeleitete Klasse verwendet die Member- und Member-Funktion der Basisklasse erneut. In C++ erbt die Vererbung nicht das private Mitglied. Im folgenden Beispiel sind struct Data
und Data* data
private Mitglieder! Also meine Frage ist: Wie können wir Iterator::hasNext()
Funktion innerhalb der abgeleiteten Klasse PeekingIterator
aufrufen, wenn es nicht einmal erbt struct data
und Data* data
!?C++, Grundlagen zur Vererbung
// 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 {
}
Ich sehe das Problem nicht, Aufruf 'Iterator :: hasNext() 'sollte gut funktionieren .. Was ist die Frage? – HazemGomaa
Vererbung gehört zu erben private Mitglieder. Sie sind einfach nicht zugänglich. Wenn Sie möchten, dass die Basisklasse diese beeinflusst, stellen Sie entweder public/protected member-Funktionen bereit, um erforderliche Operationen für sie auszuführen (die von abgeleiteten Klassen verwendet werden können). Sie können andere Funktionen bereitstellen, die einen Zeiger oder Verweis auf private Mitglieder geben (über die dann die Privaten geändert werden können), aber wenn Sie das tun, können Sie die Mitglieder auch öffentlich machen und damit fertig werden. – Peter
Dumme Frage, wenn ich 'PeekingIterator pi' in' main' deklariere, kann ich die Basisklassenfunktion wie 'pi.Iteratorr :: hasNext()' aufrufen? –