#include <iostream>

#include <cstring>

using namespace std;


class Person

{

char* name;

int id;

public:

Person(int id, char* name);

~Person();

Person(Person& person);

void changeName(char * name);

void show() { cout << id << ',' << name << endl; }

};


Person::Person(int id, char * name)

{

this->id = id;

int len = strlen(name);

this->name = new char[len + 1];

strcpy(this->name, name);

}


Person::Person(Person& person)

{

this->id = person.id;

int len = strlen(person.name);

this->name = new char[len + 1];

strcpy(this->name, person.name);

}




Person::~Person()

{

if (name)

delete[]name;

}


void Person::changeName(char * name)

{

if (strlen(name) > strlen(this->name))

return;

strcpy(this->name, name);

}




------------------------------------------------------------------------------


이까지는 어차피 깊은복사 생성자랑 클래스 정의해놓은거니까 필요없고



이제 저기서부터 새로


void f(Person person)

{

person.changeName("dummy");

}


int main()

{

Person father(1,"kk");

f(father);

father.show();


}


해도 문자열이 안바뀌는 이유가 뭐임??


Person father(1, "kk"); 한담에

Person mom(father);

mom.changeName("DDD");

mom.show(); 


이건 먹히는데 위에건 father 이름이 변환되지않고 그대로 나옴;;

무슨 차이때문에 이런거??