【问题标题】:What is the meaning of :: in C++? [duplicate]C++ 中 :: 的含义是什么? [复制]
【发布时间】:2015-07-14 05:55:53
【问题描述】:

我正在学习 C++,因为在我的学校里我把它作为一门学科,我的教授做了这段代码,我有一个问题。

class binario{

public: 
    int n;

    binario(); // constructor sin parametros
    binario(int); //Constructor con parametro

    void estado(); //funcion
    long int convierte(); //funcion
    long int complementouno(); //funcion
};
binario::binario(){ //binario clase :: binario constructor sin parametro
    n=0; //inicialia n = 0
};

binario::binario(int n){ //binario clase :: binario (int n) constructor con parametro
    **binario::n=n;**   
};

binario::n=n 是什么意思??谢谢,希望能得到一些帮助,我的教授不够好。

【问题讨论】:

  • 这意味着您正在使用参数n 中的值设置类成员n,该参数隐藏了类成员n。我总是通过以不同于类成员的方式命名参数来避免这种情况。
  • 请注意,函数右括号后的; 是不必要的。 (clang 对此给出警告)
  • 非常感谢!我想我现在明白了

标签: c++ constructor


【解决方案1】:

:: 用于访问类/结构或命名空间的静态变量和方法。它还可以用于访问另一个作用域的变量和函数(实际上类、结构、命名空间在这种情况下都是作用域)

所以,您正在使用它来访问n 变量。

【讨论】:

  • 所以 binario:: 有效,所以我可以访问上面的 n 变量?
  • 看起来就是这样。你基本上会做类似binario::n 的事情来访问n 静态变量
【解决方案2】:

该代码不是很好的例子。这可能会更好:

class binario{

    public: 
    // If you are are using C++11 (or higher):
    // int n = 0;
    int n;

    binario();
    binario(int);

    void estado();
    long int convierte();
    long int complementouno();
};

binario::binario()
// If you are are not using C++11 (or higher). Otherwise omit this and use 
// above initialization.
: n(0) 
{};

binario::binario(int n)
// Prefer class member initializer lists. Here the first 'n' is the member
// and the second 'n' the argument. Although, you might consider different
// names, to avoid confusion.
: n(n)
{};

正如其他人所提到的,您可以在函数(构造函数)主体中使用this->nbinario::n(请首选@​​987654324@),以区分'binario::n' 和外部'n';

请注意:我删除了所有无用的 cmets 并添加了一些其他的(评论只是为了评论是一个坏习惯)。

【讨论】:

  • 现在我明白了,我的老师做了那个代码,他做了一些奇怪的事情,但是我从你们所有人那里得到了很好的解释,我能理解它,非常感谢:D跨度>
【解决方案3】:

它将类内的n 的值设置为构造时作为参数给出的n 的值。由于两者共享相同的名称,因此需要进行一些区分。

最好写成:

binario::binario(int n) {
    this->n = n;   
}

或使用不同的名称:

binario::binario(int a_number) {
    n = a_number;
}

注意this是一个指向对象的指针,可以用来访问它里面的所有成员,你可以在类的任何函数里面使用this

编辑:(从 cmets 添加。)您可以使用 binario::nthis->n 在类中明确引用 int n。这是必需的,因为参数名称和数据成员具有相同的名称:n。在第二个示例中,参数具有不同的名称a_number,很明显n 指的是数据成员而不是参数。

【讨论】:

  • binario::binario(int nn){ n=nn;不应该是 binario::n=nn 吗?或者为什么这个没有binario::
  • 您可以使用binario::nthis->n 来明确引用类中的int n。这是必需的,因为参数名称和数据成员具有相同的名称:n。在第二个示例中,参数有一个不同的名称nn,很明显n 指的是数据成员而不是参数。
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 2013-12-31
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 2011-01-18
  • 1970-01-01
相关资源
最近更新 更多