c++变量没有按预期改变

C++ variables not changing as intended

本文关键字:改变 变量 c++      更新时间:2023-10-16

我目前正在做一个面向对象的c++编程项目。我已经创建了几个对象:

int main()
{
    Address address1 = Address("7732","cambie street","vancouver","BC","v5p3r3");
    Author author1 = Author("Joe","Howe","joehow@hotmail.ca");
    Publisher publisher1("candy",address1);
    Book book1 = Book("sprite",author1,publisher1,"1995");
 return 0;
}
这是我的4个对象构造函数
Address::Address(string number, string name, string c, string crty, string pCode){
    streetNumber = number;
    streetName = name;
    city = c;
    country = crty;
    postalCode = pCode;
}
Book::Book(string newTitle, Author author1,Publisher pub, string y){
    ISBN++;
    bookISBN = ISBN;
    title = newTitle;
    a = author1;
    authorCount = 1;
    d = pub;
    year = y;
}
Author::Author(string fN, string lN, string e){
    firstName = fN;
    lastName = lN;
    email = e;
}
Publisher::Publisher(string n, Address x){
    name = n;
    a = x;
}
当我在主 中调用这些函数时
cout << book1.getPublisher().getAddress().getCity() << endl;
book1.getPublisher().getAddress().set("washington",Address::CITY);
cout << book1.getPublisher().getAddress().getCity() << endl;

不确定这些在c++中是否允许,我在java中做过,

我也试过把它们分开,它会给我想要的结果,

所以我的问题变成了这种格式在c++中是允许的,如果是的话,我做错了什么。

my result displays

vancouver
vancouver

但是我想要的结果是

vancouver
washington

这些是get/set函数

Address Publisher::getAddress(){
    return a;
}

Publisher Book::getPublisher(){
    return d;
}
void Address::set(string value , int number){
switch(number)
{
    case STREET_NUMBER:
        streetNumber = value;break;
    case STREET_NAME:
        streetName = value;break;
    case CITY:
        city = value;break;
    case COUNTRY:
        country = value;break;
    case POSTAL_CODE:
        postalCode = value;break;

  }
}

Thanks for the help

getAddress()返回Address对象的副本,因此更改Publisher中的copy,而不是Address字段。

修复getAddress()应该返回reference:

Address& Publisher::getAddress()
{
    return a;
}

可能你需要重新设计你的对象层次结构,因为返回引用(指针)到内部是不好的做法。

您必须创建方法

Book::setAddress(Address ads)

或者使用指针/引用来修改它的值。
否则你就会得到一个拷贝

在Java中一切都是引用。在c++中则不是。

你的对象有如此多的副本,如果不使用指针,你就不能很容易地做你想做的事情。