#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 이름이 변환되지않고 그대로 나옴;;
무슨 차이때문에 이런거??
왜 왜 왜 그럴까 생각하자 알쏭당쏭 신기한 코딩의 나라~
앙 복사띠
앙 복사띠~
마 어려운말쓰디마라
너도 지우고 얼른 앙 복사띠로 통일해라
앙 복사띠~ - return 0;
어캐작동 안되는지 모르겟다만 this->name이랑 name이 눌값아닌건 맞지?
ㅇㅇ 그건 아님 스왑함수처럼 콜바이밸류여서 함수안은 바뀌는데 메인쪽에서는 안바뀌는걸로 나온거