클래스를 첨 쓰기 시작했는데요....
글쓴이: kknd345 / 작성시간: 월, 2004/09/27 - 8:24오후
class day
{
private:
int start_schedual[25];
int end_schedual[25];
int **p_array=new 그 다음을 모르겠네요.
int NumSchedual=0;
int total minute=0;
public:
int check_schedual( int startTotal, int endTotal);
void get_schedaul( int startTotal,int endtoTal);
}
빨간색 부분에 포인터를 제대로 지정하고 싶습니다.
제가 생각하는 포인터는 2차 배열인데요..
어떻게 해야 할지 모르겠네요. 예전에는 책 보고 했는데 지금은 못하겠습니다 ..
ㅜㅜ 도와주세요.( 얼핏 기억나기론 빨간색 처럼 하고 그리고 나서 for 구문을 돌려서 한번더 포인터를 지정했던거 같은데.... )
제가 원하는것이 무엇이냐면
int **p_array 이런 변수를 생성하고 int array[][] 2차 배열을 지정하는 방법
입니다..
그리고 혹시 2차 배열에서 array[여긴숫자][여긴문자배열]이렇게 될수 있나요?
Forums:
여기 검색하면 비슷한 질문이 많이 잇을겁니다.근데 클래스 내부에서 할
여기 검색하면 비슷한 질문이 많이 잇을겁니다.
근데 클래스 내부에서 할당을 하려는 것 처럼 보이네요.
다시 책을 보세요.
[quote="Anonymous"]여기 검색하면 비슷한 질문이 많이 잇을
위와 같은 답변을 올리는 개념없는 분은 대체 누구입니까? 저런 식의 성의없는 답변은 차라리 하질 마십시오. 이러니까 kldp가 초보들에게 불친절하다느니 질문란에 글올리는게 무섭다느니 하는 말들이 튀어나오는것 아니겠습니까.
생성자 함수에서 다음과 같이 하면 됩니다.
단, 반드시 소멸자에서 할당된 메모리를 해제해 줘야 합니다.
또한 복사 생성자(copy constructor)라든가 operator=() 같은 것들도 신중을 기해서 만들어줘야 합니다. 그렇지 않으면 클래스를 복사할 때 문제가 생깁니다. 클래스를 만들 때는 생성자, 소멸자, 복사 생성자, operator=() 정도는 반드시 만들어 주는 것이 좋습니다.
위에 손님하고 똑같은 말을 하는 것이 좀 기분나쁘긴 하지만, 어쨌든 가지고 계신 C++ 책의 포인터, 생성자, 소멸자, 복사생성자, operator=() 부분을 다시 보시는 것이 좋습니다.
추가로, 만약 N차원 배열에서 맨 처음 항목만 가변이고 다른 부분은 고정이라면 다음과 같이 만들 수도 있습니다.
결론부터 말하자면 불가능합니다. E1[E2]와 같은 배열 참조식에서, 둘 중 하나는 배열의 이름, 포인터, 문자열 상수 중의 하나가 되어야 하고, 다른 하나는 0을 포함한 양의 정수가 되어야 합니다. 또한, 배열의 크기가 N이라고 할 때 0~N(즉 마지막 원소의 다음을 가리키는 index)까지의 숫자만 index로 사용할 수 있습니다. C++의 배열은 perl의 hash나 php의 연관 배열 같이 편리한 기능을 제공하지 않으며, 오로지 0을 포함한 양의 정수(혹은 그것을 결과값으로 갖는 수식)만 index로 사용 가능합니다.
lsj0713 님의 말에 전적으로 동감하지 않습니다...
kldp 의 역할이 질문에 답변해주는 것이 아님은 물론이며
lsj0713 님의 윗글의 답변자의 말씀이 성의가 없는것도 아닙니다.
답변의 형태나 여부는 답변자의 자유입니다. 그에 대해 왈가왈부할 자격을 가진사람은 kldp 에 아무도 없다고 봅니다.
물론 틀린 내용에 대한 지적이나, 올바르지 못한 언어표현 그리고 혐오스러운
글일경우 를 제외하고는 말이죠.
학원이나, 질문에 대한 답을 전문으로 하는 사이트가 아닌이상, 책을 다시보라는
답변은 충분히 타당하다고 봅니다.
책을 충분히 정독했다면, 누구나 깨달을수 있게 작성된것이 책입니다...
모쪼록 위와같은 상황이 다시 연출되지 않았으면 합니다.
왜 이런말 있지 않습니까?
물고기를 잡아주지말고 잡는법을 가르쳐 주랬다고... 경험자의 경험에 비추어
보면 책만 잘 읽어도 반은 갑니다. 그것에 대한 경험을 물려주고자 하는 말씀
이었던것 같습니다... 제가보기엔 충분히 좋은 답변입니다.
저는 lsj0713 님의 답변에 대한 내용을 반박하는 것이 아니라, 다른 답변자를
비난 하는 태도가 못마땅 했기에 이와같이 글 올립니다.
제 아이디로 다시 글 올립니다.
kldp 의 역할이 질문에 답변해주는 것이 아님은 물론이며
lsj0713 님의 윗글의 답변자의 말씀이 성의가 없는것도 아닙니다.
답변의 형태나 여부는 답변자의 자유입니다. 그에 대해 왈가왈부할 자격을 가진사람은 kldp 에 아무도 없다고 봅니다.
물론 틀린 내용에 대한 지적이나, 올바르지 못한 언어표현 그리고 혐오스러운
글일경우 를 제외하고는 말이죠.
학원이나, 질문에 대한 답을 전문으로 하는 사이트가 아닌이상, 책을 다시보라는
답변은 충분히 타당하다고 봅니다.
책을 충분히 정독했다면, 누구나 깨달을수 있게 작성된것이 책입니다...
모쪼록 위와같은 상황이 다시 연출되지 않았으면 합니다.
왜 이런말 있지 않습니까?
물고기를 잡아주지말고 잡는법을 가르쳐 주랬다고... 경험자의 경험에 비추어
보면 책만 잘 읽어도 반은 갑니다. 그것에 대한 경험을 물려주고자 하는 말씀
이었던것 같습니다... 제가보기엔 충분히 좋은 답변입니다.
저는 lsj0713 님의 답변에 대한 내용을 반박하는 것이 아니라, 다른 답변자를
비난 하는 태도가 못마땅 했기에 이와같이 글 올립니다.
우선, QnA 게시판에 원래 목적과는 전혀 관련없는 일로 글을 올리게 되
우선, QnA 게시판에 원래 목적과는 전혀 관련없는 일로 글을 올리게 되어 대단히 유감입니다.
본론으로 들어가서... 위의 문제가 된 답변이 '물고기 잡는 법'을 가르쳐 줬습니까?
이 답변에 대체 무슨 성의가 있습니까? C++에 대해 하나도 모르는 사람도 첫째 줄과 셋째 줄은 쓸 수 있습니다. 둘째 줄은 무엇에 대해 묻는가만 알아도 쓸 수 있는 문장입니다. 결론적으로, 질문자에게 도움이 되는 정보는 단 하나도 없습니다. 검색해서 비슷한 질문이 많이 나온다면 그 글에 대한 링크라도 걸던지요. 책을 보라고 했는데, 책 이름이라도 어디 적어놨습니까? 무슨 책을, 그리고 그 책중의 무슨 부분을 보라는 것입니까?
지금도 초보에서 그리 멀지는 않습니다만... 저도 초보였던 시절이 있습니다. 그때, 저런 답변을 들으면 정말 기가 찼습니다. 나중에 다시 보면, 저런 식의 답변 하는 사람들 중에 정말 제대로 아는 사람은 없었습니다. 정작 제대로 아는 사람들은 가만히 있는데, 어설픈 사람들이 습관적으로 저런 답변 다는거죠.
물론 수준 이하의 질문도 많습니다. 어떤 질문에는 정말로 'RTFM'밖에 할 말이 없습니다. 그러나 이번 질문은 전혀 아닙니다. 분명히 자신이 궁금한 점을 명확하게 묻고 있습니다. 또한 포인터가 초보자들에게 책읽어서 바로 이해가 갈 만큼 쉬운 문제도 아닙니다. 답변하기 싫으면 하지 않으면 그만이지, '검색도 안하고 책도 안읽고 질문하냐' 라는 뉘앙스의 답변은 함부로 해서는 안됩니다. http://bbs.kldp.org/viewtopic.php?t=44957 같은 얘기가 왜 나오는 것 같습니까?
만약 위와 같은 무성의한 답변이 허용된다면, 저의 태도 또한 별로 잘못된 것은 아니겠지요. 검색도 안하고 질문하는 것이 비난의 대상이라면, 아무데서나 '책읽고 검색해봐라' 남발하는 무성의한 답변 또한 비난의 대상입니다. 질문자에게 지켜야 할 에티켓이 있다면, 답변자 또한 마찬가지입니다.
[quote="lsj0713"]우선, QnA 게시판에 원래 목적과는 전혀
동감입니다~
lsj0713 답변 고맙습니다. 덕분에 포인터로 이차배열 구현할수 있게
lsj0713 답변 고맙습니다. 덕분에 포인터로 이차배열 구현할수 있게 되었습니다. 그런데.. 컴파일 하니깐 소멸자에서 에러 납니다 ㅜㅜ..
무엇이 문제일까요?
아 그리고 new (int *)[25]로 컴파일 하니깐 에러 나길래..
new int *[25]로 고쳤습니다. 이렇게 해도 되나요?
new (int *[25]); 이렇게 해도 에러는 사라지던데요..
무엇이 제대로 된건지 모르겠습니다..
1%의 가능성이면 충분하다!
최선을 다하자!
day::day() { int **schedual= new
day::day()
{
int **schedual= new int *[25];
for ( int i = 0; i < 25; i++ )
{
schedual[i] = new int[25];
}
}
schedual 이 컨스트럭터의 로컬 변수로 선언되고 사용됩니다.. 이경우 컨스트럭터가 수행이 끝나면 schedual 변수는 사용할 수 없습니다.. - 이때문에 디스트럭터에서 에러납니다.
day class 의 선언부에 변수 선언문(schedual의.. )을 옮겨 보세요..
덧. new int*[25] , new (int *)[25] 가 맞을 듯 합니다. - integer 의 포인터 타입인 배열을 생성하는 것이지요.
에러가 발생하는 이유는 위의 분께서 말씀하신 대로입니다. int **sc
에러가 발생하는 이유는 위의 분께서 말씀하신 대로입니다. int **schedual를 클래스의 맴버 변수로 선언하십시오.
제가 시험해볼 땐 gcc에서 했는데, 그땐 new (int *)[25] 같은 수식이 허용이 되었습니다. 그러나 안된다는 말을 듣고 VC++에서 다시 시험해보니 안되더군요. 그래서 표준문서를 뒤져봤습니다.
위의 내용은 C++ 표준문서의 문법(BNF식의 변종??)중에서 관련된 부분을 옮겨적은 것입니다. 제가 제대로 해석했는지는 모르겠지만...
중간과정은 길고 복잡하니 생략하고 결론만 말하자면 new (int *)[25]는 허용되지 않으며(gcc에서 동작하는 이유는 gcc의 배려(?) 혹은 확장입니다) new int *[25]가 맞습니다. 단, new (int *)는 허용됩니다. 괄호를 씌우게 되면 new-expression의 두번째 형태를 따라가야 되는데, 그 경우에는 아무리 따라가도 []가 나오지 않습니다.
new (int *[25]) 가 되는 이유와, 이것이 올바른 코드인지 아닌지는 잘 모르겠습니다. 일단 암만 따라가도 []가 안나오는 것으로 봐서는 잘못된 코드인 듯 한데...
일단은 new int *[25]가 맞습니다. new (int *)[25]라고 적은 것은 연산자의 우선순위가 헷갈릴 때 괄호를 붙이는 제 버릇 때문이며, 이것은 틀린 코드입니다.
[quote="Anonymous"]여기 검색하면 비슷한 질문이 많이 잇을
성의가 없다는 말도 맞긴하지만 다음과 같은 답변이었으면 더 좋았을겁니다.
군소리 필요 없습니다. 물고 늘어질 필요도 없구요....
제 경험상으론 차라리 위와 같은 간단한 답변이 더 도움이 되더군요...
글타래 제목에서는 분명 클래스를 처음 사용한다고 했습니다.
처음 시작하는 사람들에게 효과가 완벽한 쥐약(!)은 예제코드밖에 없습니다.
활용 예를 제시해준다면 그나마 그걸 여러번 돌려보고 이해할 수 있을겁니다.
그런데 책을 찾아보면 해당 문제에 대한 언급이 없을 수도 있습니다.
아주 기본적인 내용을 언급하기 때문이죠... :) 물론 책의 어느 부분을 찾아보라면
도움이 될 수 있을지도 모르겠지만 단지 책보라고 하는건 좀 그러네요...
저같으면 이렇게 쓸수도 있다고 생각합니다. :)
P.S.
전 이걸 표준으로 알고 써왔는데 -_- 잘못 알고 있었던거로군요...
표준문서라면 그 ISO/IEC 문서 맞죠?? :D ?
---------------------------------------------------------------
폐인이 되자 (/ㅂ/)
[quote="lsj0713"]new (int *[25]) 가 되는 이유
다시 한번 살펴본 결과 new (int *[25])는 맞습니다. 틀린 것은 new (int *)[25] 뿐입니다.
ps. 제가 참고한 문서는 ISO/IEC 14882:1998 맞습니다.
Re: 클래스를 첨 쓰기 시작했는데요....
lsj0713님의 답변대로 배열로는 불가능합니다. 그런데 C++에는 map이라는
컨테이너가 있어서 겉보기에 배열같이 쓰일 수 있습니다. 예를 들면
ps. lsj0713님은 hclc에서 활동하시는 분 맞죠? 저는 hclc++에 가끔 출몰하는
김의석입니다. 반갑습니다. 성의없는 답변에 분개 :!: 하시는 이유에 대해서는
저도 공감합니다. 제가 초보였을 시절에 친절하게 답변을 해주시는 분들께
무척 고마움을 느꼈고 제가 받은 것을 조금이나마 베풀려고 합니다. 그리고
답변을 하는 과정에서 자신의 생각을 정리할 수도 있고 잘못 알고 있던 부분을
고칠 수도 있으니까 공부도 됩니다.
Re: 클래스를 첨 쓰기 시작했는데요....
네 맞습니다. 근데 요새는 뉴스그룹 들어가는게 귀찮아서 그냥 kldp에서 놀고 있습니다. 글쓰는게 어쩐지 hclc 분위기가 풍기더니 김의석 님이셨군요. ^^;
그게 아니라면 몇십분씩 책을 뒤져가며 답변을 해주지는 않을 겁니다. 오히려 답변해주다가 자신이 미처 생각치 못했던 헛점을 발견하는 경우가 많습니다. QnA 게시판만 쳐다보고 있으면 저절로 자신의 부족한 부분들이 드러나니 이처럼 편리한 공부방법이 따로 없지요 :-)
저도 물론 아직 갈길이 멉니다만,솔직히, "책좀 봐주고 질문하지~"
저도 물론 아직 갈길이 멉니다만,
솔직히, "책좀 봐주고 질문하지~" 싶은 질문들이 있을때,
약간의 짜증이 나긴 합니다. 심오한 부분까지 찾아보고
질문하길 원하지는 않지만, 단순히 모든 C 책에서 공통적으로
다룰만한 부분을 질문할때는, 한마디 해 줘야한다고 생각합니다.
어짜피 그런 헛된 질문을 하는 사람은 계속 탄생하기 마련입니다.
그런사람에게 누군가 악역을 해주어야, 서로를 위해 좋다고 생각합니다.
사람은 하나를 받게되면, 점점 더 많은것을 당연시 여기지 않습니까?
삽질의 대마왕...
댓글 달기