通过设定功能改变了数值,但是;调用时值不变

时间:2019-07-13 07:21:17

标签: c++

我有两个类:“作者”类和“书”类。 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

2 个答案:

答案 0 :(得分:3)

  

在使用author.setEmail()函数更改值后使用stock.print()函数时,不会使用新电子邮件进行打印。

这是因为stock有其自己的Author对象的副本。更改authormain对象的状态不会更改stock.authorAuthor对象的状态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;
    }
}