2017-01-06 7 views
2

私は以下のクラスを持っている、と私は唯一の継承されたクラスBがだけ親のコンストラクタのパラメータの一部を継承

class A{ 
private: 
    int quantity; 
    int price; 
protected: 
    char *name; 
    char *category; 
public: 
    A(int quantity, int price, char *name, char* category) 
{ } // CONSTRUCTOR 

}; 


class B: public A 
{ 
private: 
    char *location; 
public: 
    B(int quantity, int price, char *name, char* category, char *location) :A(quantity, price,name, category) 
}; 

私がしたいのか、親クラスのパラメータの一部だけを持っていることを望みます行うこのように、AからクラスBを継承のみ名、カテゴリを作ることです:

B(char *name, char* category, char *location) :A(name, category) 

をしかし、それは動作しません、私はプライベートこれらの属性を作ることは私の問題を解決することを考えたが、それはしませんでした。これを行う方法はありますか、または必要な属性を持つ別のクラスを作成する必要がありますか?

+0

コンストラクタとデストラクタもinheritibleとプライベートデータはありません。 – Raindrop7

+0

2つのパラメータを持つ別のコンストラクタに 'A'を渡します。 – Galik

答えて

2

解決方法1:

A(char *name, char* category) {...} 
... 
B(char *name, char* category, char *location) :A(name, category) {...} 

解決策2:あなただけのこれら2つのパラメータを取り、そのために別のコンストラクタを作ることができますあなたはAのための唯一のコンストラクタ(あなたが作ったものと同じもの)を保つが、デフォルトとすることができます値quantitypriceため

A(char *name, char* category, int quantity = 0, int price = 0) {...} 
// Notice that the parameters that have default values must come at 
// the end of the param list 

... 
    B(char *name, char* category, char *location) :A(name, category) {...} 
+0

ありがとうございます!私はこれを初めて知っていますし、クラス内で多くのコンストラクタを作れるかどうかはわかりませんでした。 – Arya1209

+0

@ Arya1209あなたが大歓迎です、それが助けられて嬉しいです。 –

関連する問題