一个c++类可以拥有子类吗?



假设你有一个类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();
}

最新更新