我什么时候需要在C ++中使用嵌套类?嵌套类提供了什么,通过拥有两个类无法提供?
class A
{
class B
{
};
};
而不是:
class A
{
};
class B
{
};
答案 0 :(得分:1)
我觉得你有点困惑。
在第一个示例中,类B
嵌套在类A
中。当类B
非常特定于类A
时,这是一个好主意,并且可能污染命名空间。例如:
class Tree
{
class Node
{
};
};
根据您使用的其他第三方库,Node
可能已经定义。通过在Node
中嵌套Tree
,我们明确地说明了我们正在谈论的Node
。
在第二个示例中,如果命名空间中还有其他Node
个类,则可能存在冲突。
答案 1 :(得分:0)
猫是一种动物。我们可以定义Cat
和Animal
类如下:
class Animal {};
class Cat {};
但是我们已经定义了彼此没有任何关系,所以Cat
不是Animal
。我们可以在它们之间定义 IS-A 关系(继承):
class Animal {};
class Cat : public Animal {};
然后我们可以这样做:
Animal* animal = new Cat();
现在Cat
是Animal
( IS-A 关系)的子类。通过这种方式;我们可以实现动态多态,Cat
就像Animal
一样,但有自己的风格/行为。
但我们可以将它们定义为以下(嵌套类):
class Cat
{
class Animal {};
};
这是无用的,错误的,因为我们告诉编译器Cat
内部有Animal
类型!这意味着一只猫本身就有另一只动物!通过这种方式,我们可以从Cat
课程访问Animal
的所有私人成员。它看起来像一只吃动物(老鼠)的猫,而那只动物(它是一只老鼠)可以看到那只猫的所有私处(例如猫的肚子)!