C++类使用双冒号

use*_*217 7 c++

我正在学习C++.现在我还不完全明白这是做什么的

Some_Class::Some_Class {
    etc...
}
Run Code Online (Sandbox Code Playgroud)

我会为自己做一些研究,但我不知道从哪里开始或者它叫什么.帮助将不胜感激.

AnT*_*AnT 11

没有办法说出它是什么,因为你发布的"代码"无效且含糊不清.

  • 它可以是以异类方式制作的嵌套类定义.定义嵌套类时,可以立即在内部定义内部类,如

    class Some_Class {   // <- definition of the outer class
      ...
      class SomeClass {  // <- definition of the inner class
        ...
      };
      ...
    };
    
    Run Code Online (Sandbox Code Playgroud)

    或者,如果您愿意,您只能在里面声明嵌套类,并将实际定义移到外面

    class Some_Class {   // <- definition of the outer class
      ...
      class SomeClass;   // <- declaration of the inner class
      ...
    }; 
    
    class Some_Class::SomeClass { // <- definition of the inner class
      ...
    };
    
    Run Code Online (Sandbox Code Playgroud)

    但是,为此,它必须从class/struct您发布的内容开始.

  • 或者它可以是SomeClass类的成员函数的定义Some_Class.

    class Some_Class {
      ...
      void SomeClass(int i);          // <- declaration of member function
      ...
    };
    
    void Some_Class::SomeClass(int i) // <- definition of member function
    {
      ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

    但为此,它必须包括返回类型和参数列表.

  • 或者它可以是带有{}-enclosed初始化程序的静态成员的定义

    class Some_Class {
      ...
      static int SomeClass;
      ...
    };
    
    int Some_Class::SomeClass { 42 };
    
    Run Code Online (Sandbox Code Playgroud)

    但为此,它必须包含静态成员的类型.

换句话说,没有办法说出你发布的内容以及你的问题是什么.


Cap*_*awk 5

:: 解析类或命名空间。

例如

namespace test1 { int i = 0; }
cout << test1::i << endl;
Run Code Online (Sandbox Code Playgroud)

或者

class test2 { 
     public: 
     static int i = 0; 
 };
 // after in
cout << test2::i << endl;
Run Code Online (Sandbox Code Playgroud)

你也可以添加这个:

using namespace test1;
cout << i << endl;
Run Code Online (Sandbox Code Playgroud)


Shf*_*Shf 3

您对范围解析运算符感到困惑(感谢@Huytard 提供的链接)

:: 是范围解析运算符 - 这意味着,该SomeClass方法位于 中Some_Class,给出您的示例 -Some_Class::SomeClass