2013-05-07 123 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。运算符用于访问调用它的对象中的方法和成员(即“。”左侧的对象)。

    ::操作符被称为作用域操作符。它会告诉程序在哪里查看,例如,在类声明之外定义类方法时。