类名中使用的范围解析运算符是什么意思

what does the scope resolution operator used in a class name mean

本文关键字:运算符 是什么 意思 范围      更新时间:2023-10-16

我遇到了这段代码。

class SomeClass::OtherClass : public BaseClass
{
  // stuff in here
}
SomeClass

是一个类,所以也许 OtherClass 是一个存在于 SomeClass 范围内的类?我只是从未见过它以这种方式完成。

那么,这就是它的意思吗?

也许OtherClass是一个存在于SomeClass范围内的类?

给自己一个复选标记。就是这个意思。

这用于在 SomeClass 中声明后定义OtherClass

class SomeClass {
    class OtherClass;
    OtherClass* GetOtherClassInstance() { ...}
};
class SomeClass::OtherClass {
} 

如果内部类仅在外部类的上下文中有意义,则可以这样做。

class Vector {
  class Iterator;
  Iterator* GetStart();
};
class Vector::Iterator {
   details.
}

正如在其他地方提到的,pimpl 习语是具有延迟定义的内部类的绝佳用法。

这意味着 OtherClass 是 SomeClass 的内部类。 最好已经在那里宣布了。 适合痘痘成语:

struct my_object {
  ...
private:
  struct my_impl;
  my_impl * pimpl;
};
// in a cpp file...
struct my_object::my_impl {
  ...implementation details of my_object
};

我认为SomeClassOtherClass所在的命名空间

class BaseClass {};
namespace SomeClass
{
    class OtherClass;
};
class SomeClass::OtherClass : public BaseClass
{
  // stuff in here
};

某个类是基类的名称,而其他类是派生类,它链接派生类的内部,在冒号派生类链接基类之后。在您的问题中,答案是提到了两个基类和一个派生类。