私は C++ が初めてで、以下のように LinkedListIterator ユーティリティ クラスを使用して LinkedList クラスを作成しようとしています。(質問に関連するコード部分のみをリストしました)。LinkedListIterator コンストラクターをプライベートとして作成しました。
さて、main() にこれらの 2 行があると、
LinkedListIterator iter = list->begin(); <<== No compilation error
LinkedListIterator iter2; <<==== compilation error.
デフォルトのコンストラクターがプライベートであるため、2行目のコンパイルエラーが発生します。しかし、最初の行にコンパイルエラーがない理由がわかりませんか? なんで ?コードの最初の行で何が呼び出されていますか? プライベート コンストラクターまたはコピー コンストラクターまたは代入演算子 ?
コード
class LinkedListIterator {
public:
bool operator== (LinkedListIterator i) const;
bool operator!= (LinkedListIterator i) const;
void operator++ (); // Go to the next element
int& operator* (); // Access the current element
inline Node* hasnext();
inline Node* next();
private:
LinkedListIterator(Node* p); <<==== Private constructor
LinkedListIterator(); <<==== Private constructor
Node* p_;
friend class LinkedList;//LinkedList can construct a LinkedListIterator
};
....
inline LinkedListIterator::LinkedListIterator(Node* p)
: p_(p)
{ }
inline LinkedListIterator::LinkedListIterator()
{ }
inline LinkedListIterator LinkedList::begin()
{
return first_;
}
inline LinkedListIterator LinkedList::end()
{
return NULL;
}
.......
class LinkedList {
public:
void append(int elem); // Adds elem after the end
void printList();
LinkedList() {
first_ = NULL;
}
LinkedListIterator begin();
LinkedListIterator end();
LinkedListIterator erase(int elem);
private:
Node* first_;
};
main()
{
LinkedList *list = new LinkedList();
list->append(1);
list->append(2);
list->append(3);
LinkedListIterator iter = list->begin(); <<== No compilation error
LinkedListIterator iter2; <<==== compilation error.
}