「C++入門書」の第16章の終わりに向かって、次のコードに遭遇しました(一連の行を削除しました)。
class Sales_item {
public:
// default constructor: unbound handle
Sales_item(): h() { }
private:
Handle<Item_base> h; // use-counted handle
};
私の問題はSales_item(): h() { }
回線にあります。
完全を期すために、私の質問に関連すると思われるHandleクラステンプレートの部分も引用します(Item_baseクラスを表示する必要はないと思います)。
template <class T> class Handle {
public:
// unbound handle
Handle(T *p = 0): ptr(p), use(new size_t(1)) { }
private:
T* ptr; // shared object
size_t *use; // count of how many Handles point to *ptr
};
私は次のようなものを期待していました:
a)Sales_item(): h(0) { }
これは、著者が前の章で繰り返し使用した規則です。
b)Handle<Item_base>()
Handleクラスのデフォルトコンストラクターを呼び出すことが意図されている場合。
代わりに、本が持っているのはですSales_item(): h() { }
。私の直感的な反応は、h()が関数宣言に疑わしいほど似ているため、これはタイプミスであるということです。一方、g ++でコンパイルして、このクラスを使用するサンプルコードを実行してみたところ、正しく機能しているようです。何かご意見は?
編集:すべての良い答え、ありがとう!その間に30分間、同じ本の第12章から関連する引用を追跡しました。「クラス型のメンバーを初期化するとき、そのメンバーの型のコンストラクターの1つに渡される引数を指定しています。使用できます。そのタイプのコンストラクターのいずれか。」そして、皆さんが指摘したように、この場合、ゼロの引数を渡します。