c++变量没有按预期改变
C++ variables not changing as intended
我目前正在做一个面向对象的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++中则不是。
你的对象有如此多的副本,如果不使用指针,你就不能很容易地做你想做的事情。
相关文章:
- 变量没有改变?通过向量的函数调用
- 在向量内更改变量的值不会改变其在向量外的值
- C++11:具有互斥锁的线程看到原子变量的值发生变化,尽管这是唯一可以改变它的代码
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 标准在哪里定义了可变变量可以改变
- C++11:可变的 lambda 似乎没有改变变量?
- printf() 似乎改变了一个变量
- 为什么我的变量在单独的线程中修改时没有改变?C++/boost
- 为什么 Player.x 和 Player.y 变量没有改变?
- C - 如何将各处的静态函数称为改变其私有变量
- 即使"friend class rect"在平方类中被评论,为什么它要改变矩形类的私有变量?
- 为什么调用 CUDA 内核函数时这个类成员变量没有改变
- 全局变量的顺序会改变C /OpenGL的性能
- 为什么一个函数的末尾有常量这个词,即使它确实改变了一个变量
- 如何在C++中改变超类和子类的变量
- setRoomName不会改变变量roomName
- 不能改变变量的值
- 是否有一种方法可以改变变量在内存中的存储方式(位大小)
- Std::cout改变变量的值
- 使用引用改变变量的地址