위에 있는 add 함수는
Shape* add(Shape* p)
{
this->add = p;
return p;
}
getNext 함수는
Shape* getNext()
{
return next; (next 변수는 Shape* next로 선언되있습니다.)
}
이렇게 되있는데 저런 코드를 링크드 리스트라고 한다더라고요.
코드 부분에서 그런데 이해가 가지 않는 부분이 몇개 있습니다.
1. pLast = pStart; 이 부분에서 pLast에 pStart를 대입했는데
왜 다시 그 밑줄에 pLast = pLast -> add(new Rect()); 이 코드가 나오는 것인가요?
이럴거면 pLast = pStart 부분은 필요없지않나요?
거기다 포인터에서 다음 포인터로 넘어가면서 상속된 클래스들을 한꺼번에 불러오는 while 구문도 이해가 안갑니다.
p = p -> getNext() 이 부분이 임시 포인터가 가리키고 있는 다음 노드의 주소값을 대입하는 부분이라는데
getNext {return Next} 고작 이런 함수로 해당 포인터에서 다음 포인터로 어떻게 넘겨준다는 형식인지 이해가 가질 않습니다.
차라리 배열 형식으로 카운터라도 하면 이해라도 가겠는데 포인터에서 다음 포인터로 가는 분기점이 정확히 어디인지 몰라서 헷갈립니다. 혹시 이거 덧글로 설명좀 해주실분 계신가요??
계신가요->계시나요 (계시다는 동사라 형용사 뒤에 쓰이는 어미 -ㄴ가(요)를 붙인 계신가요는 적절하지 않고, 주로 동사 뒤에 쓰이는 어미 -나(요)를 붙인 계시나요가 적절함) [리듬 맞춤법 봇♬]
되있->돼있 (되어 = 돼임) [리듬 맞춤법 봇♬]
답글 빨리달려서 설레서 들어왔는데 리듬봇 새끼네
코드 전문을 몰라서 잘은 모르겠지만 pLast가 pStart 의 주소값을 기준으로 하기 때문에 먼저 주소를 대입받는 것 같고 - return 0;
링크드 리스트면 그 다음 노드를 가리키는 포인터가 Next에 저장돼있을터. 그렇기 때문에 next를 내놓으라고 하면 그 다음 노드를 불러오고, 출려하고, 다음꺼 가져오고, 출력하고 가 반복될껍니다 - return 0;
1. pLast = pStart; 가 없으면 pLast엔 쓰레기값이 들어있잖아요. 지우고 실행하면 알 겠지만 다음 라인에서 에러가 뜰겁니다.
ㄴ 그러면 Start가 아니라 nullptr 로 초기화해도 되는건가? - return 0;
안될걸요 nullptr->add()하게 될테니
그림이 대충 그려지는데 2. 지금 이 링크드리스트는 pStart가 첫번째 원소를 가리키고 있고 pLast가 마지막 원소를 가리키는 거 같음
p = pStart부분에서 임시변수 p가 pStart가 가리키던 첫번째 노드를 가리키게 함
그러면 쓰레기값이 들어가 있어서라는 설명은 조금 부족하지 싶네영 - return 0;
while문은 p가 가리키는 원소를 paint한 다음 p가 가리키는 원소의 멤버 next 포인터가 가리키는 원소(즉 다음 원소)를 다시 p가 가리키게 함
음 착각의 여지가 있네염
포인터는 그림 그리면 바로 이해 됨...
친절한 답변감사합니다