0

私は OOP C++ プログラムに取り組んでおり、少し苦労しています。デフォルトおよびデフォルト以外のコンストラクターとポインターの使用を示すプログラムを作成しようとしています。最初にデフォルトのコンストラクターを実行しようとしています。

したがって、1 つのメソッド内のローカル変数のみを格納および取得できます。しかし今、私は値を他のクラスに渡さなければなりません (そうしなければならないと思います)。

オブジェクトを1つのクラスに初期化することはできましたが、オブジェクトを取得しようとすると、基本的に空のスペース以外は取得されません。オブジェクトを別のクラスのメソッドに正しく渡し、それを取得するにはどうすればよいですか?

ポインタはありますか?

Book.cpp

#include <iostream>
#include <sstream>
using namespace std;

#include "Book.h"

Book::Book()
{
}

void Book::setTitle(string  title)
{
    this->title = title;
}

void Book::setAuthorName(string first, string last)
{
    Author author;

    author.setFirstName(first);
    author.setLastName(last);
}


void Book::setPrice(double price)
{
    this->price = price;
}

string Book::convertDoubleToString(double number)
{
    return static_cast<ostringstream*>( &(ostringstream() << number) ) -> str();
}

string Book::getBookInfo()
{
    stringstream ss;
    Author author;

    ss << title << endl << author.getFullName() << endl << "$" << convertDoubleToString(price) << endl;

    return ss.str();
}
4

2 に答える 2

3

この部分はうまくいきません

void Book::setAuthorName(string first, string last)
{
    Author author;

    author.setFirstName(first);
    author.setLastName(last);
}

この関数内でローカルオブジェクトを作成し、その値を設定してから、関数が終了すると破棄されるためです。Authorこの著者情報を保持したい場合は、Book クラス内に class のメンバー変数を作成する必要があります。

Book クラス宣言内で、次のようなものが必要です

class Book {
    Author m_Author;  // This is your member variable that you can store author data in

};

次に、関数内で、ローカル変数を作成するのではなくsetAuthorName、値を設定します。m_Authorこれにより、メンバー変数内の値が保持されますm_Author

于 2012-09-02T20:46:59.310 に答える
1

著者は本に属します。ブックが存在する限り存在するように、クラス Book のコンストラクターで宣言する必要があります。

メソッドで宣言しているため、メソッドの実行中にのみ存在します。

void Book::setAuthorName(string first, string last)
{
    Author author;
    ...
}

範囲の問題です。

于 2012-09-02T20:50:12.270 に答える