2013-05-07 122 views
-4

我找到了類Kwadrat。作者使用了三種類型的operator ::,。和 - >。箭頭是唯一可行的。這三者有什麼區別?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++書籍或教程都可以回答這個問題。 – 2013-05-07 23:14:29

+1

OP必須努力學習C++。別。 – 2013-05-07 23:18:06

+0

'::'是範圍解析運算符。如果我說'a :: b',這意味着我在討論'a'裏面的'b'是否'a'是一個名稱空間或類,並且'b'是否是一個函數,變量,類,名稱空間, 隨你。 – 2013-05-07 23:28:36

回答

0

->作品上的指針,.對象和::的命名空間。具體做法是:

  1. 使用->.或通過指針通過參考訪問當一個類/結構/聯合件,在第一種情況下,在後一種。
  2. 使用::來引用namespaceclass(名稱空間)中的函數,例如,在定義用該類聲明的方法時。
+0

::也能在物體上正常工作;例如'std :: vector :: iterator' ... – 2013-05-07 23:14:01

+0

一個類也是一個命名空間。我沒有故意寫'命名空間'。 – 2013-05-07 23:16:18

0

x->y相當於(*x).y。也就是說,->在獲取字段之前取消引用該變量,而點運算符只獲取該字段。

x::y查找Ÿ在命名空間中的X.

+0

由於'::'('範圍'操作符)也訪問類的靜態成員,因此您的答案不完整。 – 2013-05-07 23:14:45

6
  • ::命名命名空間內的類型,命名空間內的變量,類中的靜態變量或類中的類型。
  • .名稱實例變量或成員函數
  • a->b(*a).b語法糖。
+0

一般來說,'a-> b'也可以是一個重載的'operator->'的語法糖,其中'a'是一個實例。 – 2013-05-07 23:15:40

+2

@尼克:當然;但如果OP正在爲此苦苦掙扎,我不想投入多麼瘋狂的'operator->'工作:) – 2013-05-07 23:17:10

+0

這是一個公平的觀點...... – 2013-05-07 23:18:10

0

的用例是:當你有一個指針用於

  • .當你有一個對象實例用於
  • ::當你有一個靜態成員或

    1. ->用於命名空間
  • +0

    沒有靜態類的東西。 – 2013-05-07 23:15:15

    +0

    我的意思是一個靜態成員抱歉 – 2013-05-07 23:16:08

    0

    - >等於說(* Kwadrat_pointer).value。當您有一個調用對象方法或檢索對象成員的對象指針時,可以使用它。

    The。運算符用於訪問調用它的對象中的方法和成員(即「。」左側的對象)。

    ::操作符被稱爲作用域操作符。它會告訴程序在哪裏查看,例如,在類聲明之外定義類方法時。