C++ new 질문좀~

min2to의 이미지

class Department{

public:

void Addemployee(permanent* emp);

};


int main()

{

department.Addemployee(new permanent("kin", 1000));

}

여기서요~ 저 전체 해석좀 .. 해주시면 않되나요 ㅠㅠ

특히 new는 어떤식으로 값을 전달해주는지 모르겟네요

항상

int *a=new int;

이런식의 형태로만 봐와서;; 저기 emp가 어떠한 형식의 값을 받는지..;;


지리즈의 이미지

new는 클래스의 실질적인 구체물인 인스턴스를 얻는 명령입니다.
즉, new 이전의 변수는 오직 껍대기만 있고, 실존하지 않는 것이라고 보면 됩니다.

부서는 직원(employee)를 추가하는 메소드를 가진 클래스입니다.
그런데, 함수의 인자인 직원은 permenent 포인터형입니다.

department.Addemployee(new permanent("kin", 1000));

이 문장의 내용을 보면, department의 개체에
Addemployee 메쏘드 호출에 필요한 perment*형 인자를 새로운 개체발생하면서 바로 넘겨주고 있는 현장입니다.

근데 왜 즐(kin)이죠?

There is no spoon. Neo from the Matrix 1999.

min2to의 이미지

"이 문장의 내용을 보면, department의 개체에
Addemployee 메쏘드 호출에 필요한 perment*형 인자를 새로운 개체발생하면서 바로 넘겨주고 있는 현장입니다."

제가 둔해서 그런데여...

void Addemployee(permanent* emp); //에서 *emp
는 무슨값을 받는거예여?..

department.Addemployee(new permanent("kin", 1000));

이상태면 kin과 1000 둘중에 하나를 주소참조 해준다는 뜻인가요?

아니면 머라고 말해야되지 ㅠㅠ

암튼 이해를 못하겟는데. .어떻해 쉽게 설명 해주시면 않되나요 ㅠㅠ

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

r0x2tk1t의 이미지

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

chadr의 이미지

간단히 말하면 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.

min2to의 이미지

어렵네요.. ㅜㅜ

애매모호 한게 너무 많은거 같아여.. ~

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

fanta1의 이미지

제가 C++을 배운지 얼마 않되서 그런지는 모르겠지만요..

permanent를 어떤 객체라고 단정 짓는 이유가 어디 있는지 궁금합니다. 선언이 되어 있는것도 아니고,
지금 헤더 파일이 있는 것도 아니고, 단순히 위 소스만 보자면 permanent는 뜬금없이 나타난... 아무것도 아닌 문자에 불과하지 않나요??

그리고, 제가 알기론 C++은 대소문자를 구별하는 것오로 알고 있습니다.
department.Addemployee을 왜 Department의 Addemployee란 공개메소드라고 단정 지으시는지 잘 모르겠습니다. department라는 객체가 선언된 적도 없는데 말입니다. 뭐.. 이 경우는 굳이 유추는 가능하리라 생각이 듭니다만...

위 질문에 아래와 같아진다면 윗분들의 설명은 정확합니다. 제 생각입니다..^^;

class Department{
public: 
  void Addemployee(permanent* emp);
};
 
class permanent{
private:
  ....
public:
  permanent(char * s, int i);
};
 
int main()
{
Department department;  // 개별 데이터 변수가 없으로 디폴트 생성자를 사용 의미 없음.
department.Addemployee(new permanent("kin", 1000));
}

잘못된 부분은 지적해 주세요... 저도 사실 잘 이해가 않되는데...
써봤습니다.

그것이 알고 싶당~

lovewar의 이미지

class Department{
 
public:
 
void Addemployee(permanent* emp);
 
};
 
int main()
 
{
permanent *temp = new permanent("kin", 1000);
department.Addemployee(temp);  
 
}

변수를 만들지 않고 바로 생성하는 기법을 사용해서 그렇습니다.
좀더 익숙해 지면 혼란도 사라질것 입니다.

pok의 이미지

저는 C++에서 이렇게 쓰는것은 매우 않좋다고 봅니다.
이러한 기법은 자바에서는 많이 쓰이나, 메모리 관리를 직접해주어야하는 C++에서는 자원관리책임에 문제가 있을듯싶은데요...

만일 department가 모든 자원관리책임을 진다면 괜찮을수 있겠지만, 이렇게 자원관리가 애매모호할때는 보통 팩토리를 만들어서 생성의 책임을 명확히 하고 자원소멸또한 명확히하는 객체가 따로 필요할 듯 싶습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.