【问题标题】:Why do I need nested class in C++ [closed]为什么我需要 C++ 中的嵌套类 [关闭]
【发布时间】:2014-07-13 11:21:33
【问题描述】:

什么时候需要在 C++ 中使用嵌套类?嵌套类提供了什么是两个类无法提供的?

class A
{ 
    class B
    {

    };
};

而不是:

class A
{

};

class B
{

};

【问题讨论】:

  • 这被称为“嵌套类”而不是“子类”。如果您想被理解,请使用公认的术语。
  • 哦,如果您不知道真正的答案,请对问题投反对票,并且您提供的链接与我在这里提出的问题无关..我在问是否有人找到过C++ 中嵌套类的任何使用...它有什么需要?他们设计的特别之处是什么?如果你不能回答它,你只需投反对票就好了..
  • @AdamBurry 第一个是Java问题。

标签: c++ subclass


【解决方案1】:

我觉得你有点糊涂了。

在您的第一个示例中,类 B 嵌套在类 A 中。当 B 类确实非常特定于 A 类时,这是一个好主意,并且可能会污染命名空间。例如:

class Tree
{
    class Node
    {
    };
};

根据您使用的其他第 3 方库,Node 可能已经定义好了。通过将Node 嵌套在Tree 中,我们可以明确说明我们正在谈论的是哪种Node

在第二个示例中,如果命名空间中有其他 Node 类,则可能存在冲突。

【讨论】:

  • 您的代码有语法错误。
【解决方案2】:

猫是动物。我们可以定义CatAnimal类如下:

class Animal {};
class Cat {};

但是我们已经定义了它们彼此之间没有任何关系,所以Cat 不是Animal。我们可以定义它们之间的IS-A关系(继承):

class Animal {};
class Cat : public Animal {};

那么我们可以这样做:

Animal* animal = new Cat();

现在CatAnimal 的子类(IS-A 关系)。通过这种方式;我们可以实现动态多态,Cat 的行为类似于Animal,但有自己的风格/行为。

但我们可以将它们定义如下(嵌套类):

class Cat
{
    class Animal {};
};

这是无用且错误的,因为我们告诉编译器 Cat 自身内部有一个 Animal 类型!这意味着猫体内有另一种动物!通过这种方式,我们可以从Animal 类访问Cat 的所有私有成员。它看起来像一只猫吃动物(老鼠),而动物(老鼠)可以看到那只猫的所有私处(比如猫的肚子)!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 2013-01-04
    • 2017-12-15
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多