在c ++中,是否可能声明内部类(CInner),使其具有外部类(COuter)作为其基类?
这个问题是关于c ++技术问题的。不是编程风格或个人喜好的问题。
答案 0 :(得分:9)
是。这编译:
class COuter
{
class CInner;
};
class COuter::CInner : public COuter
{
};
这是必需的原因是派生类要求整个定义出现在自己的定义中。所以你只需要确保在内部类的定义开始之前完全定义外部类。
答案 1 :(得分:2)
可以声明从封闭类派生的内部/嵌套类。但是你不能同时定义你的嵌套类。例如,如果您尝试编译此代码,它将无效使用不完整类型的COuter。
class COuter
{
class CInnner : COuter
{
}
}
但是如果你只是声明你的类和延迟内部类的定义,那么它将起作用,因为那时Couter类的定义将是完整的。换句话说,除非完全定义,否则不能使用类型。
正如John Calsbeek所说,以下代码行将起作用。
class COuter
{
class CInner;
};
class COuter::CInner : public COuter
{
};
此处还讨论了此主题以供参考。 Can a nested C++ class inherit its enclosing class?
答案 2 :(得分:1)
以下代码编译并运行良好:
#include <iostream>
using namespace std;
class COuter
{
public:
COuter ()
{
cout << "COuter() called" << endl;
}
class CInner;
};
class COuter::CInner : public COuter
{
public:
CInner()
{
cout << "COuter::CInner() called" << endl;
}
};
int main()
{
COuter o;
COuter::CInner i;
return 0;
}
输出:
$ ./inner-outer.exe
COuter() called
COuter() called
COuter::CInner() called