C++嵌套类的用法(附带实例)
C++ 中,允许在一个类中定义另一个类,这样的类称为嵌套类。
例如,下面的代码在定义的 CList 类内部又定义了一个嵌套类 CNode:
CList 类作为外围类,通常不能访问嵌套类中的私有成员(虽然嵌套类在其内部定义),但上述代码在定义 CNode 类时将 CList 类作为自己的友元类,使得 CList 类能够访问 CNode 类的私有成员。
内部嵌套类只允许在其外围类域中使用,在其他类域或作用域中是不可见的。例如,在 main() 函数中定义一个 CNode 对象,会导致非法定义错误,因为对 main() 函数来说,嵌套类 CNode 是不可见:
例如,下面的代码在定义的 CList 类内部又定义了一个嵌套类 CNode:
class CList //定义CList类 { public: class CNode //嵌套定义CNode类 { friend class CList; //将CList类作为友元类 private: int m_Tag; //CNode类的私有成员变量 m_Tag public: char m_Name[128]; //CNode类的公有成员变量m_Name }; //至此,CNode类定义结束 public: CNode m_Node; //定义CNode类型的成员变量m_Node void SetNodeTag(int tag) //定义成员函数 SetNodeTag() { m_Node.m_Tag = tag; //访问CNode类的私有成员变量,一般不允许访问,友元类则允许访问 } };上述代码在 CList 类中嵌套定义了一个 CNode 类,并在其中定义了一个私有成员变量 m_Tag 和一个公有成员变量 m_Name。
CList 类作为外围类,通常不能访问嵌套类中的私有成员(虽然嵌套类在其内部定义),但上述代码在定义 CNode 类时将 CList 类作为自己的友元类,使得 CList 类能够访问 CNode 类的私有成员。
内部嵌套类只允许在其外围类域中使用,在其他类域或作用域中是不可见的。例如,在 main() 函数中定义一个 CNode 对象,会导致非法定义错误,因为对 main() 函数来说,嵌套类 CNode 是不可见:
int main(int argc, char *argv[]) { CNode node; //非法定义,不能访问 CNode类 return 0; }