首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过集合函数改变值,但是;值在调用时不会改变

通过集合函数改变值,但是;值在调用时不会改变
EN

Stack Overflow用户
提问于 2019-07-13 07:21:17
回答 2查看 42关注 0票数 1

我有两门课--“作者”和“书”。图书类构造函数使用作者构造函数。正在发生的问题是,当我使用setter函数更改author类中的值时,然后尝试使用Book print函数打印所有信息,则不会打印新值。

我将Author的默认构造函数设置为实现所有私有值。

//作者班

代码语言:javascript
复制
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;
}

//图书类

代码语言:javascript
复制
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(); 
}

//主修班

代码语言:javascript
复制
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的股票市场现实

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-13 07:26:01

当我使用stock.print()函数在使用author.setEmail()函数更改一个值之后,它不会使用新的电子邮件打印。

这是因为stock有自己的Author对象副本。在author中更改main对象的状态并不会改变stock.author的状态,即stock中的Author对象的状态。

我建议在Book中添加一个成员函数来设置Author

代码语言:javascript
复制
void Book::setAuthor(Author const& author)
{
    return this->author = author;
}

main中,调用函数。

代码语言:javascript
复制
author.setEmail("g.jonathan@gmail.com");
stock.setAuthor(author);  // Add this
stock.setPrice(2.99);

现在,打印的调用将按照您的期望工作。

代码语言:javascript
复制
cout << stock.print() << "\n" << endl;
票数 3
EN

Stack Overflow用户

发布于 2019-07-13 07:27:58

您应该将AuthorBook类中作为指针。

代码语言:javascript
复制
class Book
{
    Author* author;

    Book(string name, Author* author, double price)
    {
        this->author = author;
    }
}

然后把地址传过来

代码语言:javascript
复制
Book stock("...", &author, 4.99);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57017021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档