2017-12-21 25 views
-4

基本クラスのデータメンバーを派生クラスのコンストラクタとして使用しようとしていますが、プログラムを実行しようとするとエラーが発生するようです。私のコードは以下の通りです:派生クラスのコンストラクタとして基本クラスのデータメンバーを使用するには? (C++で)

#include <iostream> 
using namespace std; 

class Book 
{ 
protected: 
    string title; 
    string author; 
public: 
    Book(string t, string a) 
    { 
     title = t; 
     author = a; 
    } 
}; 

class MyBook: public Book 
{ 
protected: 
    int price; 
public: 
    MyBook(string T, string A, int P): Book(title, author) 
    { 

     price = P; 
    } 
    void display() 
    { 
     cout << "Title: " << title << endl; 
     cout << "Author: " << author << endl; 
     cout << "Price: " << price << endl; 
    } 
}; 
int main() 
{ 
    MyBook One("abc", "def", 2); 
    One.display(); 
} 

この派生クラスのコンストラクタを作成する際の私の失敗は何ですか?あなたが書く何

+1

質問に注意を払わない限り、スパムにタグを付けないでください。 – shmosel

+1

[複数の言語にタグを付けないでください](https://meta.stackoverflow.com/questions/354931/when-is-it-appropriate-to-tag-multiple-languages-in-my-question/)あなたの質問が特にこれらの言語に関するものでない限り。あなたはそれがより速い答えにつながると思うかもしれませんが、現実はより速い閉鎖につながる可能性がより高いということです。 –

+0

よろしくお願いします。実際にスタックオーバーフローを使用して私の最初の時間。私は答えが急いでいるわけではありません。プログラミングの面では初心者であり、自分で学習するだけです。どのような世界に住んでいる。あなたの助言をありがとう。 – Jayy

答えて

0

MyBook(string T, string A, int P): Book(T, A) 

:Book(T, A)部分は、基本クラスのコンストラクタに引数を渡すことです:私はあなたが実際にしたいと思い何

MyBook(string T, string A, int P): Book(title, author) 

titleおよびauthorはここでは定義されていませんが、TおよびAが定義されています。

titleauthorは、基本クラス内で使用される名前である可能性があります。派生クラスのコンストラクタから基本クラスのコンストラクタに情報を渡していることに注意してください。そのため、派生クラスのコンストラクタは、基本クラスのコンストラクタに約TAを伝える必要があります。

+0

よかったです。ありがとうございました。 – Jayy

+0

@Jayyあなたは役に立つと思われるすべての回答をアップヴォートすることを検討し、最良のものを「受け入れた」と「尋ねる」ことができます。それがこのサイトの仕組みです。 –

0

MyBook(文字列T、文字列A、int P):書籍(タイトル、著者)が間違っています タイトルと著者がそこで認識されません。 MyBook(文字列T、文字列A、int P):ブック(T、A)