기본적으로 기본적으로 단일 링크 된 목록을 디자인 할 때 몇 가지 문제가 발생했습니다. 는 여기에 내가 STL 컨테이너에서 본 적이C++ 함수 오버로드
struct Node {
int val;
Node* next;
};
struct SinglyLinkedlist {
int size;
Node* head;
SinglyLinkedlist();
const Node* Begin() const {
printf("const begin\n");
if (size > 0)
return head->next;
}
Node* Begin() {
printf("begin\n");
if (size > 0)
return head->next;
}
};
선언, 예를 들어 표준이다 :: 큐, 같은 이름의 기능을 할 수 있음을 다음과 같이 공존
//std::queue
value_type& front();
const value_type& front() const;
그것이 나를 붙 잡았다 왜냐하면 같은 이름을 가진 함수 나 함수 오버로딩을 만들지 않았기 때문입니다. 예를 들어, 같은 이름이지만 다른 인수 유형을 가진 함수. 따라서 이것이 내가 모르는 함수 오버로딩인지 또는 다른 종류의 함수인지 궁금합니다. 그리고 런타임에 호출 할 Begin()을 프로그램에서 어떻게 알 수 있습니까? 컴파일러가 컨텍스트에서 CONSTNESS를 감지하고 호출 할 것을 결정할 것이라고 생각합니까? 내가 가진 또 다른 문제는 명시 적으로 * 연산자, * Begin() 예 Node * dereferenced 및 출력 값을 기본적으로 Begin() -> val과 같은 출력하지 않고 * 연산자가이 기능을합니다 어쨌든 고맙습니다. 당신의
const Node* Begin() const
방법에 관한
int main()
{
SinglyLinkedlist l;
l.Push(1);
l.Push(2);
l.Push(3);
l.PrintList();
printf("%d\n",*l.Begin()); //print out 1 same as l.Begin()->val
}
... 무엇인지 이해 double, 최종 printf (% d)는 쓰레기 값을 줄 것입니다! 감사 –