假设你有一个类a
,你想添加一个子类b
,你会怎么做呢?也许像这样:
class a{
public:
class b{
};
};
也许它确实创建了类,但由于它被分类为对象,你如何创建一个。比如,如果你要在代码中将a作为对象来实现它就会像这样:
a myObj;
但是如何从a实现b呢?
可以
让我们看下面的例子:
/// define the outer struct
struct Outer{
/// Define the inner struct
struct Inner {};
/// Up to this point, Outer has NOTHING in it, only a definition for
/// Inner without any objects.
/// And now inside Outer you can use Inner struct for anything you want.
/// For example Outer can have (but not required) a member called data of
/// type Inner like:
Inner data;
};
/// Now we create an object of type Outer:
Outer a;
/// Now a has a member called data of type Outer::Inner
/// Note in global scope Inner is undefined, you don't have Inner,
/// only Outer::Inner!!
/// But if Inner is public (i have used struct so it is) you can create
/// Outer::Inner objects:
Outer::Inner b;
/// Now b is an object of type Outer::Inner
TL;DR: inside classa
:b obj
。类外a::b obj
我想你不太明白实例化和实现是什么意思。
当您实现(或者更确切地说,在这种情况下,扩展)一个类时,您创建了一个子类。
当你实例化一个类(调用它的函数或new
),你创建了一个实例,一个对象。
因此,如果您的问题是是否可以扩展内部类,那么答案是可以,当然可以:类在其核心上只是名称空间。因此,您可以在名称空间a
中创建另一个类,以扩展类a::b
。例子:
class a {
public:
class b {
virtual void printsomething() { printf("This is the originaln"); }
};
class c: b {
virtual void printsomething() override { printf("This is the newn"); }
}
};
如果你的问题是你是否可以实例化一个内部类,那么答案仍然是可以。和以前一样,类只是名称空间。所以你可以这样做:
class a {
class b {
void printsomething() { printf("PRINTING...n"); }
};
void dosomething() {
b obj;
obj.printsomething();
}
};
无论哪种情况,您都可以从外部类a
实例化内部类,如下所示:
int main() {
a::b obj1;
obj1.printsomething();
a::c obj2;
obj2.printsomething();
}