2012-07-07 2 views
8

나는 ++ C에 비트 새로 온 사람과 Qt는 물건을 작업하려고이 혼란스러운 일이 건너 온 :C++ 클래스 객체 포인터와 액세스하는 멤버 함수

Class *obj; 
: 다양한 튜토리얼 상태 일 등에

개념

*obj - 참조 된 메모리에 저장된 객체의 값을 표시합니다
obj - 그것은

그래서 가리키는되는 메모리의 주소가됩니다, 나는 somethi 할 것 즉, 이후, 확실하지 왜, 정상 물체로부터 [normalObj.function1();] 일 것이다 - 나는 기능에 액세스하려면

*obj=new Class(); 

같은 NG하지만, 나는 obj->function1(); 대신 *obj->function1();

의해야 가치.

그래서, 포인터 객체 왜 우리가 을 기능에 액세스 할 수 메모리 참조를 사용하거나 정상적인 객체의 경우는 항상 참조하는 것이 그 것이다 않습니다에 대한

PS : 누군가가 좋은 튜토리얼에 나를 인도 할 수 C++에서 포인터를 사용하므로 이러한 쿼리를 직접 처리 할 수 ​​있습니다.

+1

[ "C++에서 포인터 좋은 입문서"(http://dl.dropbox.com/u/6101039/Modern%20C%2B%2B 같이 할 수있다 .pdf) –

답변

23

* 기호는 포인터를 정의하고 포인터를 역 참조하는 데 사용됩니다.내가하는 int에 대한 포인터를 만들고 싶었 예를 들어, 내가 할 수있는 :

int *ptr;

을이 예에서, *이가 INT에 포인터임을 선언하는 데 사용하고있다. 이제 포인터를 선언하지 않고 이미 선언 된 포인터와 함께 * 기호를 사용하면 역 참조가됩니다. 아시는 바와 같이 포인터는 단순히 주소입니다. 포인터를 역 참조 할 때 해당 주소가 가리키는 값을 얻고 있습니다. 예를 들어 새 주소에 대한 포인터를 할당하는 경우

int pointToMe = 5; 
int *ptr = &pointToMe; 
std::cout << *ptr; 

이, 또한 5를 출력하고이 선언에없는, 당신은 하지* 기호를 사용합니까. 따라서 :

int pointToMe = 5; 
int *ptr; 
ptr = &pointToMe; 

당신이 어떻게 할 것입니다. 주소를 가리키는 값에 포인터를 적용하여 새 값을 지정할 수도 있습니다. 예 :

int pointToMe = 5; 
int *ptr = &pointToMe; 
std::cout << *ptr; // Prints out 5 
*ptr = 27; 
std::cout << *ptr; // Prints out 27 

이제는 ->이 기준 기호와 같은 역할을합니다. 포인터를 역 참조하고 .을 포인터가 아닌 객체와 함께 사용한 것처럼 멤버 함수 및 변수를 사용합니다. 단지 포인터에 대한 간략한 개요입니다

CObj object; 
(&object)->MemberFunction(); 

을가 도움이되기를 바랍니다 : 심지어 포인터가 아닌 객체로 먼저 주소를 얻어서 ->을 사용할 수 있습니다.

+1

설명해 주셔서 감사합니다 -> 연산자 –

3

사실, 틀렸어. 당신은 할 수 :

obj=new Class(); 

또는 완전히 다른

Class *obj = new Class; 

.

Class *obj; 
*obj = new Class; 

은 컴파일되지 않습니다.

objClass*이며 할당 할 수있는 대상은 무엇입니까 (new Class이 반환).

3

"일반".을 사용하여 개체 멤버에 액세스 할 수 있지만 먼저 포인터를 역 참조해야합니다.

운영자 우선 순위 때문에이 값은 (*obj).member입니다. 이 글을 쓰는 것이 너무 많다고 생각하는 사람들에게는 obj->member이 더 짧은 대안입니다.

하면 객체를 Class의 구성원 인 포인터 ptr를 역 참조 유형 Classc, *c.ptr 수단이있는 경우. 이것이 다른 것을 의미하는 (*obj).member의 한 가지 이유입니다.

0

보다 정확하게 U이

Class obj; 
Class* obj_ptr; 

obj_ptr = &obj; 

// Now onwards you can use the pointer to access data members and function 

obj_ptr->a = 10; // Like this