我写了这段代码:
class Address{
private:
std::string street;
int house;
public:
Address(std::string s, int h):
street(s), house(h) {}
void setHouse(int h) {house = h;}
friend std::ostream &operator << (std::ostream& os, Address &a);
};
class Person{
private:
std::string name;
Address A;
public:
Person(std::string n, std::string v, int c) :
name(n), A(v, c) {}
Address& getAddress(){return A;}
friend std::ostream &operator << (std::ostream& os, Person &a);
};
std::ostream &operator << (std::ostream& os, Address &a){
return os << "[" << a.street << ", " << a.house << "]";
}
std::ostream &operator << (std::ostream& os, Person &p){
return os << p.name << " " << p.A;
}
int main(){
Person pietro("Pietro", "Champs Elysees", 16);
std::cout << pietro << std::endl;
Address ma = pietro.getAddress();
ma.setHouse(333);
std::cout << pietro << std::endl;
return EXIT_SUCCESS;
}
我有这些问题:
- 为什么该行
ma.setHouse(333);
没有任何副作用pietro
(即在第二个打印中,门牌号没有改变)? - (我知道这不是正确的方法,但是)我怎样才能
ma.setHouse(333);
产生副作用pietro
? const Address& getAddress() const {return A;}
如果上面的代码没有副作用,我为什么要写?