C++ new 질문좀~
글쓴이: min2to / 작성시간: 금, 2006/05/05 - 7:30오전
class Department{
public:
void Addemployee(permanent* emp);
};
int main()
{
department.Addemployee(new permanent("kin", 1000));
}
여기서요~ 저 전체 해석좀 .. 해주시면 않되나요 ㅠㅠ
특히 new는 어떤식으로 값을 전달해주는지 모르겟네요
항상
int *a=new int;
이런식의 형태로만 봐와서;; 저기 emp가 어떠한 형식의 값을 받는지..;;
Forums:
permanent.
new는 클래스의 실질적인 구체물인 인스턴스를 얻는 명령입니다.
즉, new 이전의 변수는 오직 껍대기만 있고, 실존하지 않는 것이라고 보면 됩니다.
부서는 직원(employee)를 추가하는 메소드를 가진 클래스입니다.
그런데, 함수의 인자인 직원은 permenent 포인터형입니다.
department.Addemployee(new permanent("kin", 1000));
이 문장의 내용을 보면, department의 개체에
Addemployee 메쏘드 호출에 필요한 perment*형 인자를 새로운 개체발생하면서 바로 넘겨주고 있는 현장입니다.
근데 왜 즐(kin)이죠?
There is no spoon. Neo from the Matrix 1999.
"이 문장의 내용을
"이 문장의 내용을 보면, department의 개체에
Addemployee 메쏘드 호출에 필요한 perment*형 인자를 새로운 개체발생하면서 바로 넘겨주고 있는 현장입니다."
제가 둔해서 그런데여...
void Addemployee(permanent* emp); //에서 *emp
는 무슨값을 받는거예여?..
department.Addemployee(new permanent("kin", 1000));
이상태면 kin과 1000 둘중에 하나를 주소참조 해준다는 뜻인가요?
아니면 머라고 말해야되지 ㅠㅠ
암튼 이해를 못하겟는데. .어떻해 쉽게 설명 해주시면 않되나요 ㅠㅠ
모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다
클래스도 자료형입니다.
emp는 결국 permanent에 대한 포인터입니다.
permanent는 클래스이고요..
따라서, new permanent("kin", 1000)으로
kin과 1000이라는 데이터를 가지는 permanent 클래스의
객체가 생기며 emp는 그 객체를 가르키는 포인터입니다.
결과적으로 emp는 객체가 가진 kin과 1000을
모두 접근가능합니다. ^^
kin과 1000 둘중에 하나의 주소를 참조해주는 개념이 아니에요~
日新 日日新 又日新
Google Talk::chanju_dot_jeon(at)gmail_dot_com
간단히 말하면
간단히 말하면 permanent라는 객체를 메모리에 할당하면서 permanent(char *, int) 의 형태를 갖는 생성자를 호출한다고 보시면 됩니다.
위에서 말씀하신
int *a=new int;
도 사실
int *a=new int();
와 같은 형식이 가능합니다.. 즉 int의 기본생성자인 int()를 호출한다고 보시면 됩니다.
permanent클래스의 소스가 있으시다면 확인해보시면 아실 겁니다.. 아마 permanent(char *, int)와 비슷한 형태의 생성자가 있을 겁니다.
따라서 Addemployee 함수는 new연산자가 permanent객체를 메모리에 생성하고 난 후의 메모리 주소를 인자값으로 받습니다.
그렇기 때문에 만약에 permanent클래스가 기본 생성자를 가지고 있다면..
department.Addemployee(new permanent());
와 같은 구문도 정상입니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
bb
어렵네요.. ㅜㅜ
애매모호 한게 너무 많은거 같아여.. ~
모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다
저는 소스 자체가 문제가 있어 보이는데요...
제가 C++을 배운지 얼마 않되서 그런지는 모르겠지만요..
permanent를 어떤 객체라고 단정 짓는 이유가 어디 있는지 궁금합니다. 선언이 되어 있는것도 아니고,
지금 헤더 파일이 있는 것도 아니고, 단순히 위 소스만 보자면 permanent는 뜬금없이 나타난... 아무것도 아닌 문자에 불과하지 않나요??
그리고, 제가 알기론 C++은 대소문자를 구별하는 것오로 알고 있습니다.
department.Addemployee을 왜 Department의 Addemployee란 공개메소드라고 단정 지으시는지 잘 모르겠습니다. department라는 객체가 선언된 적도 없는데 말입니다. 뭐.. 이 경우는 굳이 유추는 가능하리라 생각이 듭니다만...
위 질문에 아래와 같아진다면 윗분들의 설명은 정확합니다. 제 생각입니다..^^;
잘못된 부분은 지적해 주세요... 저도 사실 잘 이해가 않되는데...
써봤습니다.
그것이 알고 싶당~
다음과 같이 코딩할 수 있습니다.
변수를 만들지 않고 바로 생성하는 기법을 사용해서 그렇습니다.
좀더 익숙해 지면 혼란도 사라질것 입니다.
저는 C++에서 이렇게
저는 C++에서 이렇게 쓰는것은 매우 않좋다고 봅니다.
이러한 기법은 자바에서는 많이 쓰이나, 메모리 관리를 직접해주어야하는 C++에서는 자원관리책임에 문제가 있을듯싶은데요...
만일 department가 모든 자원관리책임을 진다면 괜찮을수 있겠지만, 이렇게 자원관리가 애매모호할때는 보통 팩토리를 만들어서 생성의 책임을 명확히 하고 자원소멸또한 명확히하는 객체가 따로 필요할 듯 싶습니다.
poklog at http://poksion.cafe24.com/poklog/
댓글 달기