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

时间:2012-05-04 16:28:55

标签: c++ class scope-resolution

我遇到了这段代码。

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

SomeClass是一个类,所以也许OtherClass是一个存在于SomeClass范围内的类?我从来没有见过这样做过。

那么,这是什么意思?

4 个答案:

答案 0 :(得分:11)

  

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

给自己勾选标记。这就是它的意思。

用于随后在OtherClass内声明SomeClass之后定义class SomeClass { class OtherClass; OtherClass* GetOtherClassInstance() { ...} }; class SomeClass::OtherClass { }

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

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

{{1}}

正如其他地方所提到的,pimpl习语是对具有延迟定义的内部类的极好用法。

答案 1 :(得分:3)

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

struct my_object {
  ...

private:
  struct my_impl;
  my_impl * pimpl;
};

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

答案 2 :(得分:0)

我认为SomeClassOtherClass所在的名称空间

class BaseClass {};
namespace SomeClass
{
    class OtherClass;
};

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

答案 3 :(得分:0)

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