我有两个类:“作者”类和“书”类。 book类的构造函数使用Author构造函数。发生的问题是,当我使用setter函数更改author类中的值,然后尝试使用Book打印功能打印所有信息时,不会打印新值。
我设置了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;
}
在使用author.setEmail()函数更改值后使用stock.print()函数时,不会使用新电子邮件进行打印。
输出 乔纳森·冈萨雷斯(M)@ g.jonathan.com
没有BS!股票市场的现实by乔纳森·冈萨雷斯(M)@ g.jonathan.com
没有BS!股票市场的现实by乔纳森·冈萨雷斯(M)@ g.jonathan.com
// //预期的输出
乔纳森·冈萨雷斯(M)@ g.jonathan.com
没有BS!股票市场的现实by乔纳森·冈萨雷斯(M)@ g.jonathan.com
没有BS!股票市场的现实,乔纳森·冈萨雷斯(M)@ g.jonathan@gmail.com
答案 0 :(得分:3)
在使用author.setEmail()函数更改值后使用stock.print()函数时,不会使用新电子邮件进行打印。
这是因为stock
有其自己的Author
对象的副本。更改author
中main
对象的状态不会更改stock.author
中Author
对象的状态stock
。
我建议向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;
答案 1 :(得分:0)
您应该在ValueError: operands could not be broadcast together with shapes (6890,14,3) (14,14,3)
类中将Author
作为指针。
Book
然后传递地址
class Book
{
Author* author;
Book(string name, Author* author, double price)
{
this->author = author;
}
}