我目前正在开发面向对象的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
感谢您的帮助
答案 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 ++中不是。
您的对象有很多副本,如果不使用指针,就无法轻松完成所需的操作。