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

时间:2016-10-05 09:38:05

标签: c++

我目前正在开发面向对象的C ++编程项目。 我创建了一些对象:

tsc

这是我的4个对象构造函数

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;
}

当我在主

中调用这些函数时
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;
}

不确定c ++中是否允许这些是我在java中完成的,

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

所以我的问题就是c ++允许这种格式,如果是这样,我做错了什么。

我的结果显示

cout << book1.getPublisher().getAddress().getCity() << endl;
book1.getPublisher().getAddress().set("washington",Address::CITY);
cout << book1.getPublisher().getAddress().getCity() << endl;

但我想要的结果是

vancouver
vancouver

这些是我的获取/设置功能

vancouver
washington

感谢您的帮助

3 个答案:

答案 0 :(得分:3)

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

要解决问题,getAddress()应返回参考:

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

可能您需要重新设计对象层次结构,因为returning references (pointers) to internals is bad practice

答案 1 :(得分:1)

您必须创建方法

Book::setAddress(Address ads)

或者使用指针/引用来修改它的值 否则你只会得到它的副本

答案 2 :(得分:0)

在Java中,一切都是参考。在C ++中不是。

您的对象有很多副本,如果不使用指针,就无法轻松完成所需的操作。