【问题标题】:Difference between “::” “.” and “->” in c++“::”“.”之间的区别和 C++ 中的“->”
【发布时间】:2013-05-02 01:22:09
【问题描述】:

我找到了 Kwadrat 类。作者使用了三种类型的运算符 ::, 。和->。箭头是唯一有效的。这三个有什么区别?

#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;
}

【问题讨论】:

  • 任何 C++ 书籍或教程都可以回答这个问题。
  • OP 一定是在努力学习 C++。不要。
  • :: 是范围解析运算符。如果我说a::b,这意味着我在谈论a 内部的ba 是命名空间还是类,b 是函数、变量、类、命名空间等等。

标签: c++ class pointers


【解决方案1】:
  • :: 命名命名空间中的类型、命名空间中的变量、类中的静态变量或类中的类型。
  • . 命名实例变量或成员函数
  • a-&gt;b(*a).b 的语法糖。

【讨论】:

  • 一般来说,a-&gt;b 可能a 是一个实例的类的重载 operator-&gt; 的语法糖。
  • @Nik:当然;但是,如果 OP 正在为此苦苦挣扎,我不想说operator-&gt; 的工作有多疯狂 :)
【解决方案2】:

-&gt; 作用于指针,. 作用于对象,:: 作用于命名空间。具体来说:

  1. 在访问类/结构/联合成员时使用-&gt;.,在第一种情况下通过指针,在后一种情况下通过引用。
  2. 使用:: 来引用namespaceclass(命名空间)中的函数,例如,在定义使用类声明的方法时。

【讨论】:

  • 一个类也是一个命名空间。我不是故意写namespace
【解决方案3】:

x-&gt;y 等价于(*x).y。也就是说,-&gt; 在获取字段之前取消引用变量,而点运算符只是获取字段。

x::y 在命名空间 x 中查找 y。

【讨论】:

  • 您的答案不完整,因为::(“范围”运算符)也访问类的静态成员。
【解决方案4】:

用例是:

  1. 有指针时使用-&gt;
  2. 当你有一个对象实例时使用.
  3. :: 用于静态成员或命名空间

【讨论】:

  • 没有静态类这样的东西。
  • 我是说静态成员对不起
【解决方案5】:

-> 相当于说 (*Kwadrat_pointer).value。当你有一个对象指针调用对象方法或检索对象成员时使用它。

.运算符用于访问调用它的对象(即“.”左侧的对象)中的方法和成员。

:: 运算符称为范围运算符。它告诉您的程序在哪里查找,例如在类声明之外定义类方法时。

【讨论】:

    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2010-10-23
    • 1970-01-01
    • 2021-02-28
    相关资源
    最近更新 更多