デフォルト以外のコンストラクターで、渡されたオブジェクト ポインターをどのように処理すればよいかわかりません。自分が何をしているのかわからないように感じるので、私はこのプログラムを間違ってやっています。
私はこれに1日半立ち往生していますが、理解できません。デフォルトのコンストラクターと非デフォルトのコンストラクターを使用する必要がある宿題の大部分を投稿します。変数/クラス/メソッドがどのように機能するかを確認できるように、使用しているクラス図も含めます。
デフォルト以外のコンストラクター内で渡されたポインターをどうすればよいですか? アクセスできないことが通知されるため、ここで値を割り当てることはできません。このコードでは:
Book::Book(string title, Author *pAuthor, Publisher *pPublisher, double price)
{
setTitle(title);
setPrice(price);
}
これらのポインターを使用する方法はありますか? 現在、デフォルトのコンストラクターを使用してすべてを正しく渡すことができますが、追加のオブジェクトを使用しているため、おそらくこれは間違っています。基本的に and で 2 行にするべきではありませんがAuthor author;
、Publisher publisher;
この時点では気にしません。
助けてください!
Book.cpp ファイル
#include <iostream>
#include <sstream>
using namespace std;
#include "Book.h"
#include "Publisher.h"
#include "Author.h"
class Book
{
public:
Book();
Book(string title, Author *pAuthor, Publisher *pPublisher, double price);
~Book();
void setTitle(string title);
void setAuthorName(string first, string last);
void setPublisher(string name, string address, string city);
void setPrice(double price);
string convertDoubleToString(double number);
string getBookInfo();
private:
string title;
double price;
Author *pAuthor;
Publisher *pPublisher;
Author author;
Publisher publisher;
};
Book::Book()
{
}
Book::Book(string title, Author *pAuthor, Publisher *pPublisher, double price)
{
setTitle(title);
setPrice(price);
}
Book::~Book()
{
}
void Book::setTitle(string title)
{
this->title = title;
}
void Book::setAuthorName(string first, string last)
{
author.setFirstName(first);
author.setLastName(last);
}
void Book::setPublisher(string name, string address, string city)
{
publisher.setName(name);
publisher.setAddress(address);
publisher.setCity(city);
}
void Book::setPrice(double price)
{
this->price = price;
}
string Book::convertDoubleToString(double number)
{
return static_cast<ostringstream*>( &(ostringstream() << number) ) -> str();
}
string Book::getBookInfo()
{
return title + "\n" + author.getFullName() + "\n" + publisher.getPublisherInfo() + "\n" + "$" + convertDoubleToString(price);
}
Main.cpp ファイル:
#include <iostream>
#include <string>
using namespace std;
#include "Book.h"
int main()
{
system("cls");
cout << "Book 1" << endl;
Author *pAuthor = new Author("John", "Doe");
Publisher *pPublisher = new Publisher("Wrox", "10475 Crosspoint Blvd.", "Indianapolis");
Book *pBook = new Book("Memory Management", pAuthor, pPublisher, 39.99);
cout << pBook->getBookInfo() << endl;
cout << endl << "Book 2" << endl;
Book book;
book.setTitle("Advanced C++ Programming");
book.setAuthorName("Linda", "Smith");
book.setPublisher("Microsoft Press", "One Microsoft Way", "Redmond");
book.setPrice(49.99);
cout << book.getBookInfo() << endl << endl;
system("pause");
return 0;
};
Author.cpp ファイル:
#include <iostream>
#include <string>
using namespace std;
class Author
{
public:
Author();
Author(string first, string last);
string getFullName();
void setFirstName(string first);
void setLastName(string last);
private:
string firstName;
string lastName;
};
Author::Author()
{
}
Author::Author(string first, string last)
{
setFirstName(first);
setLastName(last);
}
string Author::getFullName()
{
return firstName + " " + lastName;
}
void Author::setFirstName(string first)
{
this->firstName = first;
}
void Author::setLastName(string last)
{
this->lastName = last;
}
クラス図: