我有两门课--“作者”和“书”。图书类构造函数使用作者构造函数。正在发生的问题是,当我使用setter函数更改author类中的值时,然后尝试使用Book print函数打印所有信息,则不会打印新值。
我将Author的默认构造函数设置为实现所有私有值。
//作者班
Author::Author(string name, string email, char gender)
{
this->name = name;
this->email = email;
this->gender = gender;
}
Author::Author()
{
}
Author::~Author()
{
}
string Author::getEmail()
{
return email;
}
void Author::setEmail(string email)
{
this->email = email;
}
string Author::print()
{
return name + " (" + gender + ") @ " + this->email;
}//图书类
Book::Book(string name, Author author, double price)
{
this->author = author;
this->name = name;
this->price = price;
}
Book::Book()
{
}
Book::~Book()
{
}
Author Book::getAuthor()
{
return this->author;
}
string Book::print()
{
return name + " by " + this->author.print();
}//主修班
int main()
{
Author author("Jonathan Gonzalez", "g.jonathan.com",'M');
Book stock("NO BS! THE REALITY OF THE STOCK MARKET", author, 4.99);
cout << author.print() << "\n" << endl;
cout << stock.print() << "\n" << endl;
author.setEmail("g.jonathan@gmail.com");
stock.setPrice(2.99);
cout << stock.print() << "\n" << endl;
return 0;
}当我使用stock.print()函数在使用author.setEmail()函数更改一个值之后,它不会使用新的电子邮件打印。
输出Jonathan (M) @ g.jonathan.com
不要废话!乔纳森·冈萨雷斯(M) @ g.jonathan.com的股票市场现实
不要废话!乔纳森·冈萨雷斯(M) @ g.jonathan.com的股票市场现实
/预期产出
Jonathan (M) @ g.jonathan.com
不要废话!乔纳森·冈萨雷斯(M) @ g.jonathan.com的股票市场现实
不要废话!乔纳森·冈萨雷斯(M) @ g.jonathan@gmail.com的股票市场现实
发布于 2019-07-13 07:26:01
当我使用stock.print()函数在使用author.setEmail()函数更改一个值之后,它不会使用新的电子邮件打印。
这是因为stock有自己的Author对象副本。在author中更改main对象的状态并不会改变stock.author的状态,即stock中的Author对象的状态。
我建议在Book中添加一个成员函数来设置Author。
void Book::setAuthor(Author const& author)
{
return this->author = author;
}在main中,调用函数。
author.setEmail("g.jonathan@gmail.com");
stock.setAuthor(author); // Add this
stock.setPrice(2.99);现在,打印的调用将按照您的期望工作。
cout << stock.print() << "\n" << endl;发布于 2019-07-13 07:27:58
您应该将Author在Book类中作为指针。
class Book
{
Author* author;
Book(string name, Author* author, double price)
{
this->author = author;
}
}然后把地址传过来
Book stock("...", &author, 4.99);https://stackoverflow.com/questions/57017021
复制相似问题