为什么我需要在C ++中使用嵌套类

时间:2014-07-13 11:21:34

标签: c++ subclass

我什么时候需要在C ++中使用嵌套类?嵌套类提供了什么,通过拥有两个类无法提供?

class A
{ 
    class B
    {

    };
};

而不是:

class A
{

};

class B
{

};

2 个答案:

答案 0 :(得分:1)

我觉得你有点困惑。

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

class Tree
{
    class Node
    {
    };
};

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

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

答案 1 :(得分:0)

猫是一种动物。我们可以定义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类型!这意味着一只猫本身就有另一只动物!通过这种方式,我们可以从Cat课程访问Animal的所有私人成员。它看起来像一只吃动物(老鼠)的猫,而那只动物(它是一只老鼠)可以看到那只猫的所有私处(例如猫的肚子)!