|
김상면 님이 쓰신 글 :
: 멤버함수 Print 에서 객체를 사용하면 안되는 것은 ostream의 cout에서 기본 자료형은 지원하지만 사용자 정의 객체(?)는 당연히 지원을 하지 않겠죠. 지원하게 만들려면 ostream의 오버로딩된 <<연산자에 사용자정의객체를 추가 해주면 될겁니다.(아마도, 복잡하지만)
: ======>그럼 클래스를 만들때마다 ostream의 <<정의 해야 하쟎아요 그럼 상속을 사용할 필요 없지요 노가다 프로그램이지.
:
-----> ^^ 그다지 많이 만드실 필요 없습니다. 굳이 많이 써야 한다고 생각되시면 Base클래스에 정의 한번만 하시면 되죠... C가 더 노가다 입니다. *^^*
:
:
:
: 객체는 '객체.멤버' 형식으로 읽어 와야 하쟎아요 근대 기본 자료형은 다이렉트로 바로 읽어 오니 서로간에 마찰이 생깁니다. 이경우 고수님들은 어케 처리하나요?
: :
: : 이말은 무슨 소린지-_-ㅋ(좀 자세히 써주셨으면 좋았으련만)
: ======>노드는 아래와 같이 미정의 자료형입니다.
: typedef struct tagNode
: { struct tagNode* m_pNext;
: Type* m_pData;
: } Node;
: 근대 Print에서는
: while(node)
: { cout << *node->m_pData << endl; //요부분요
: node = node->m_pNext;
: }
: m_pData가 미정의 자료형이므로 Type이 클래스라면 *node->m_pData.멤버 되어야 하므로 문제가 생긴다는 겁니다.
:
:
----> node->m_pData->멤버.. 이게 맞죠... node는 김상면씨께서 포인터로 만드셨구..m_pData도 포인터로 선언
하셨죠.. 그럼 위처럼 쓰는게 맞습니다. Type에 기본형이 들어가도 Type *m_pData로 선언하셨으니 포인터로 들어갑니다... insert() 함수에서 변수의 Address를 어사인 해주셨자나요... 제가 문제를 잘못이해한게 아니라면...
:
:
: 인수로 변수가 아니라 상수를 대입하니 에러가 납니다. 정말 환장합니다. C은 너져분해도 이런 문제는 없는데..... 고수님들이 이번에 안가르쳐주면 정말로 C++버려뿔까 보당 말만 객체 지향이지 배워서 써먹으려면 꼭 저런씩으로 사람 속을 팍 팍 뒤집어 버리네..... 교수들은 뭐하나 몰라 돈만 받아 먹고 저런것도 안가르쳐주고..... 아이참 신경질나..... 이건 베이직보다 더하다 더해.....
: ==========>벌써 졸업 해버렸고요 요즘은 교수님한테 전화하면 이상한 여자가 받아요 그 아가씨 말이 얼마전에 휴대폰 구입했대요.....
:
:
:
----> 함수의 파라미터가 참조이면 참조변수를 넣어줘야 합니다. 참조란 선언과 동시에 초기화되는 어떤 변수.. 혹은 어떤 변수의 다른 이름(Alias)정도로 생각하시면 됩니다. 그런데 상수값을 넣어버리면 안되죠.. 참조 변수가 만들어지지도 초기화 되지도 않았으니...
:
:
: CList class의 멤버함수들가 인수를 전달할 때 참조형을 쓰고있지요. 그런데 1, 2, 3 등의 상수는 변수가 아니라 참조를 할 수가 없어서 컴파일 시간 에러가 나는 거지요~
: ==============>옛날에 교수님께서 클래스는 함수의 인수로 넘기지 말라고 했어요 왠만하면 참조자나 포인터로 넘기라고요 님이 생각해도 포인터를 사용해도 제 경우처럼 상수를 사용하면 에러가 나쟎아요.
:
:
:
:
:
----> 작은 클래스 혹은 스트럭쳐일경우 복사생성자만 유의해서 만들어주시면 값으로 넘겨주셔도 상관 없습니다.
메모리관리 하기 귀챦은 자질구래한 작은 구조체의 경우 전 값으로 넘겨버립니다. 때에 따라서 상황에 맞게 설계하세요.. 포인터나 객체로 넘기는것이 절대 진리는 아닙니다. (95%는 포인터로 넘기지만.. ^^) 참조를 받는 함수에 포인터를 전달하면 당연히 에러납니다. -_-;;
:
:
:
:
----> 박성근 님께서 잘 설명해주셨군요...
|