私はこのコードを書きました:
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
(つまり、2番目の印刷では家番号は変更されません)?- (私はそれが正しい方法ではないことを知っていますが)どうすれば
ma.setHouse(333);
副作用を起こすことができpietro
ますか? const Address& getAddress() const {return A;}
上記のコードに副作用がないのに、なぜ書く必要があるのですか?