저는 C++을 처음 접했고 일부 코드를 이해하려고합니다. 데이터 타입 앞에 *가있는 것은 무엇을 의미합니까? 왜 메소드 이름 앞에 클래스 이름 CAStar::LinkChild
C++ 코드 이해; * datatype과 classname :: method는 무엇을 의미합니까?
void CAStar::LinkChild(_asNode *node, _asNode *temp)
{
}
저는 C++을 처음 접했고 일부 코드를 이해하려고합니다. 데이터 타입 앞에 *가있는 것은 무엇을 의미합니까? 왜 메소드 이름 앞에 클래스 이름 CAStar::LinkChild
C++ 코드 이해; * datatype과 classname :: method는 무엇을 의미합니까?
void CAStar::LinkChild(_asNode *node, _asNode *temp)
{
}
데이터 형식 앞에 *가 있으면 변수가 데이터 형식에 대한 포인터 (이 경우 노드에 대한 포인터)라고 표시됩니다. 메서드에 전체 "노드"의 복사본을 전달하는 대신 메모리 주소 또는 포인터가 대신 전달됩니다. 자세한 내용은 Pointers in this C++ Tutorial을 참조하십시오.
메소드 이름 앞에있는 클래스 이름은 CAStar
클래스의 메소드를 정의하도록 지정합니다. 자세한 내용은 Tutorial pages for Classes을 참조하십시오.
*
그것이 pointer 것을 의미합니다. _asNode *node
은 _asNode* node
과 같습니다.
메서드가 class { ... }
내부에 정의되어 있지 않으면 클래스 이름이 메서드 이름 앞에 있습니다. ::
은 scope operator입니다.
일반적으로 프로그래밍을 처음 사용하거나 C++을 처음 사용하십니까? 프로그래밍에 익숙하지 않은 경우 몇 가지 수업을 듣기를 원할 것입니다. C++을 처음 사용하는 사람이라면 Practical C++ Programming을 온라인 C++ Primer으로 읽어보십시오. 특정 질문에 대해서는
는 : 변수 선언에 별표 (*)는 "이 포인터입니다"의미
int * pointer;
이 또한 커버 변수가 당신의 예에서와 같이 선언 된 함수 선언/프로토 타입.
선언 후에 별표는 포인터를 참조 해제한다는 의미입니다. 즉, 가리키는 위치의 가치를 얻게됩니다.
printf("memory address:%d value:%d", pointer, *pointer);
메모리 주소가 인쇄 될 때 프로그램의 상태에 따라 예기치 않게 변경된다는 점에 유의하십시오. 간단한 프로그램에서는 변경 내용을 볼 수 없지만 복잡한 프로그램에서는 변경 내용을 볼 수 있습니다.
저는 C++을 처음 사용합니다. 나는 주로 php, as3 및 C#에서 작업을 수행했습니다. 하지만 결코 C++에서는. 그러나 이러한 응답을 듣고 나는 C++이 다르다는 것을 알고 있습니다. 클래스 외부의 메소드 선언과 같습니다. 하지만 정보 주셔서 감사합니다. – numerical25
또한 함수 이름의 모호성을 제거하는 방법으로 생각할 수도 있습니다. 예를 들어 두 개의 클래스가 있다고 가정합니다 (간단한 예). 하나는 분수 (분수)를 구현하고 다른 하나는 정수 (정수)를 구현합니다. 두 클래스 모두 "add"라는 함수를 가질 수 있습니다. Fraction 클래스를 포함하면 컴파일러는 Integer 클래스가 아닌 Fraction 클래스에 대해 add 함수를 구현하고 있음을 알게됩니다. –
Nicely said, Ryan –