2013-05-07 4 views
-4

클래스 Kwadrat를 발견했습니다. 저자는 세 가지 유형의 연산자 인 ::,를 사용했습니다. 및 ->. 화살표는 작동하는 것입니다. 이 세 가지의 차이점은 무엇입니까? 포인터에"::" "."과 "->"의 차이점은 C++

#include <iostream> 

using namespace std; 

class Kwadrat{ 
public: 
int val1, val2, val3; 
    Kwadrat(int val1, int val2, int val3) 
    { 
     this->val1 = val1; 
     //this.val2 = val2; 
     //this::val3 = val3; 
    } 
}; 

int main() 
{ 
    Kwadrat* kwadrat = new Kwadrat(1,2,3); 
    cout<<kwadrat->val1<<endl; 
    cout<<kwadrat->val2<<endl; 
    cout<<kwadrat->val3<<endl; 
    return 0; 
} 
+4

모든 C++ 서적 또는 자습서에서 이에 대한 해답을 얻을 수 있습니다. –

+1

OP는 어려운 방법으로 C++를 배우려고 노력해야합니다. 하지마. –

+0

'::'는 범위 분석 연산자입니다. 내가'a :: b'라고 말하면,'a'가 네임 스페이스인지 클래스인지, 그리고'b'가 함수인지, 변수인지, 클래스인지, 네임 스페이스인지 여부를 의미합니다. , 뭐든간에. –

답변

0

-> 작품, 네임 스페이스의 개체에 .::. 구체적 :

  1. 사용 -> 또는 . 기준으로 후자에 대한 포인터를 통해 첫 번째 경우, 클래스/구조체/조합원 액세스.
  2. ::을 사용하여 클래스로 선언 된 메소드를 정의 할 때 namespace 또는 class (네임 스페이스) 내부의 함수를 참조하십시오.
+0

:: 개체에서도 잘 작동합니다. 예 : 'std :: vector :: iterator' ... –

+0

클래스도 네임 스페이스입니다. 나는 네임 스페이스를 고의로 쓰지 않았다. –

0

x->y(*x).y과 같습니다. 즉, 도트 연산자가 필드를 가져 오는 동안 ->은 필드를 가져 오기 전에 변수를 역 참조합니다.

x::y은 네임 스페이스 x에서 조회합니다.

+0

'::'('scope'연산자)도 클래스의 정적 멤버에 액세스하기 때문에 대답이 불완전합니다. –

6
  • :: 이름 이름 공간 내의 타입, 네임 스페이스 내의 변수 클래스에 정적 변수 또는 클래스 타입.
  • . 이름 인스턴스 변수 또는 기능 부재
  • a->b(*a).b위한 문법적이다.
+0

일반적으로 'a-> b'는 인스턴스가 'a'인 클래스의 과부하 된 연산자 ->에 대한 구문 설탕 일 수도 있습니다. –

+2

@ 닉 : 물론; 그러나 만약 OP가 이것으로 고생한다면 나는 얼마나 미친'operator->'작품을 던지기를 원치 않는다. –

+0

그건 공평한 점이다 ... –

0

사용 사례는 다음과 같습니다 당신이

  • .를 사용하는 포인터가있을 때 당신이
  • ::를 사용하는 개체 인스턴스가있을 때 당신이 정적 멤버를하거나

    1. ->를 사용하는 네임 스페이스
  • +0

    정적 클래스와 같은 것은 없다. –

    +0

    정적 멤버 미안 해요. –

    0

    ->는 (* Kwadrat_pointer) .value와 동일합니다. 개체 메서드를 호출하거나 개체 멤버를 검색하는 개체 포인터가있을 때이 메서드를 사용합니다.

    . 연산자는 메서드를 호출하는 개체의 메서드와 멤버 (즉, "."왼쪽에있는 개체)에 액세스하는 데 사용됩니다.

    :: 연산자는 범위 연산자라고합니다. 클래스 선언 외부에서 클래스 메소드를 정의 할 때와 같이 프로그램이 어디에서 볼지 알려줍니다.

    관련 문제