|
안녕하세요? 레조입니다.
Company의 멤버함수로 swap(Company &x)가 있네요.
이녀석의 역활은 인자로 넘어오는 Company 객체의 데이터와
자신의 데이터를 샥~ 바꾸는 것이네요.
그럼 잠깐 훓어 볼까요?
: void swap (Company &x)
인수로 Company 객체가 넘어오지만 참조(메모리공유)로 넘어오므로
넘어오는 놈은 새로이 임시 객체가 생성되지않고 넘어오는 그녀석의
메모리를 공유합니다.
(넘어오는 시점에 바깥에서 도는 쓰레드에서 이녀석에 접근하면
데이타가 변하겠죠? 같은 메모리 영역에 다른 이름을 쓰는것 뿐이니..)
어쨋든 현재(swap을 호출한 객체) 객체에서 인자로 넘어온 객체와
데이터를 바꿔치기 하기 시작합니다.
: {
: char n[20];
: int s,p;
요까지는 임시 저장을 위해 생성했겠죠?
: strcpy(n, x.name);
: s=x.sales ;
: p=x.profit ;
임시 저장공간에 인자로 넘어온 객체의 데이타를 백업하네요.
: strcpy(x.name,name);
: x.sales =sales;
: x.profit = profit;
인자로 넘어온 객체에다가 swap을 호출한 객체의 데이타를 채웁니다.
: strcpy(name,n);
: sales =s;
: profit =p;
: }
인자로 넘어온 객체의 백업데이타를 swap을 호출한 객체의 데이터로
업데이트 시키네요.
데충 이런 흐름으로 swap 함수가 사용되고 있습니다.
주소 연산자 &와 참조 연산자 &는 그 모양이 같지만 용도가 다르니
주의하면서 봐야겠습니다.
(라고 책에서 읽은 기억어.. ^^;)
김경래 님이 쓰신 글 :
: 안녕하세요 이해가 잘안가서 질문을하게되었습니다.
: 클래스에 있는 swap함수에 Company &x가 멀가르키는지를 모르겠습니다.
: 죄송합니다. 설명을 부탁합니다.
: 그럼 즐거운 하루되세요
:
: #include <stdio.h>
: #include <string.h>
:
:
: class Company {
: char name[20];
: int sales;
: int profit;
: public:
: Company (char *p =" ", int x=0,int y=0)
: {
: strcpy (name,p);
: sales =x;
: profit =y;
: }
:
: void swap (Company &x)
: {
: char n[20];
: int s,p;
: strcpy(n, x.name);
: s=x.sales ;
: p=x.profit ;
: strcpy(x.name,name);
: x.sales =sales;
: x.profit = profit;
: strcpy(name,n);
: sales =s;
: profit =p;
: }
:
: void print()
: {
: printf("회사명 %s \n", name);
: printf("매상 %d 억원 \n",sales);
: printf("이익 %d억원 \n",profit);
: }
: };
:
: void main()
: {
: Company a("사이버 (주)", 500,39);
: Company b("푸른솔 (주)",825,78);
:
: a.swap (b);
: a.print ();
: b.print ();
: }
:
|