2017-10-26 6 views
0

子クラスのコンストラクタを実装しようとしています。コンストラクタの目的はクラスの状態を渡される値に設定することだと思いますか?私はこれで正しいですか?子クラスでコンストラクタを定義する方法

エラーが発生しています。 「スーパークラス」に

コールに該当する機能

私の質問は、私はスーパークラスに子クラスのための私のコンストラクタをリンクしなければならないのですか? 2つのクラスの間のコンストラクタの関係はどうですか?

答えて

0

Buildingsにはデフォルトのコンストラクタがありません。適切な引数を渡して存在する唯一のBuildingsコンストラクターを明示的に呼び出す必要があります。

Buildingsオブジェクトのpublic default-constructionを許可しないで、子クラスがそれを使用できるようにする場合は、デフォルトのコンストラクタをprotectedにすることができます。同様に

class Buildings 
{ 
public: 
    // Public constructor, only way to construct object of this class 
    // for the general public 
    Buildings(float, float, string); 

    // Other public functions... 

protected: 
    // Default constructor, which initializes the private members 
    // to some suitable values 
    // Only usable by child-classes 
    Buildings() 
     : price(0), area(0), city("") 
    {} 

private: 
    float price, area; 
    string city; 
}; 
+0

ああ、私はこれを行い、私の建物のクラスのためのデフォルトのコンストラクタを使用する場合、私はまだその建物のクラスのために私のコンストラクタを実装する必要がありますか? –

+0

は私のコードと同じ子クラスのための私のコンストラクタですか?申し訳ありません。ちょうどその周りに私の頭を手に入れようとしています。 –

+0

@TonyHibbert私の答えの例で 'Apartment'クラスを修正する必要はありません。しかし、 'Buildings'メンバ変数はデフォルトコンストラクタによって初期化されたデフォルト値を持つことに注意してください。 –

0

子クラスのmember initializer listで親クラスのコンストラクタを呼び出す必要があります。

struct A { 
    A(int a) : a_(a) {} 
    int a_; 
}; 

struct B : public A { 
    B(int a, int b) : A(a), b_(b) {} 
    int b_; 
}; 
+0

です。アパート::アパート(フロート数、フロート数、フロート数):建物(フロート、フロート、ストリング); –

+0

申し訳ありませんが、この番号はありません。アパート::アパート(フロート数、フロート数、フロート数):価格(b_price)、面積(b_area)、都市(b_city); –

関連する問題