これは、より多くのシーズニングされたC++コーダーには愚かな質問のように思えるかもしれませんが、クラスを作成し、そのクラスのオブジェクトを作成したら、作成したオブジェクトを使用してそのクラスのパブリックメソッドを呼び出します静的メソッドです。その場合は、オブジェクトまたはクラス名自体を使用して呼び出すことができます)。オブジェクトを使用せずにクラスメソッドを呼び出すか?
これはなぜ機能しますか?
関数定義:
template <typename Object>
void printList(const List<Object>& theList) {
if (theList.isEmpty())
cout << "Empty list!" << endl;
else {
ListItr<Object> itr = theList.first();
for(; !itr.isPastEnd(); itr.advance())
cout << itr.retrieve() << " ";
}
cout << endl;
}
ファンクションコール:
printList(myList);
私はここで何をしないのですか?他のプログラムは、のオブジェクトを使用してprintList()
と呼ぶ以外は、がクラスList<int>
に属していることをどのように知っていますか?
これも途中で動作します。確認しました。私は、このような呼び出しと関数の定義方法を使用していました。今回は、関数がポインタを使って定義されていることに注意してください。
関数定義:
template <typename Object>
void List<Object>::printList() {
if(this->isEmpty())
cout << "Empty list!" << endl;
else {
ListItr<Object> itr = this->first();
for(; !itr.isPastEnd(); itr.advance())
cout << itr.retrieve() << " ";
}
cout << endl;
}
ファンクションコール:
myList.printList();
'残りのプログラムは、printList()がList Listクラスに属していることをどのように知っていますか?'それはありますか? 'List 'をパラメータとするのはなぜですか?あなたが2番目の例でメンバ関数を作成するときに、これらの関数を実行している 'List
これはクラスのメソッドではないからです。それは単純な関数です。 –
ありがとうございました - 私はそれを修正し、最初のものをメンバ関数にしました。今は呼び出すことができるオブジェクトが必要です。なぜなら、同じことが 'this'を使って行うことができるときに、オブジェクトがパラメータとして渡される必要があるのは変わったようです。 – Ambidextrous