我不知道应该如何在我的非默认构造函数中处理传递的对象指针。我做错了这个程序,因为我觉得我不知道自己在做什么。
我已经坚持了一天半,我只是不明白。我将发布我必须使用默认构造函数和非默认构造函数的大部分作业。我还将包括我正在使用的类图,以便您了解变量/类/方法的功能。
我应该如何处理非默认构造函数中传递的指针?我无法通过这里分配任何值,因为它会告诉我它无法访问。在这段代码中:
Book::Book(string title, Author *pAuthor, Publisher *pPublisher, double price)
{
setTitle(title);
setPrice(price);
}
知道如何使用这些指针吗?现在我可以使用默认构造函数正确传递所有内容,但我可能做错了,因为我正在使用其他对象。基本上我不应该有两条线,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;
};
作者.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;
}
类图: