C++ 中嵌套类常用在哪些场合
一般叫nested class吧……好处:一个private的nested class隐藏了实现细节,适合那些绝对不会暴露在外的部分。比起其它解决方案(namespace detail等) ,封装的更为彻底。其中比较具有代表性的就是pimpl惯用法了:class Aclass A { class Imp; Imp* impl; public: A(); virtual ~A(); void interface();};class A::Imp{ public: void some_dirty_work() { //... }};A::A() : impl(new Imp) { }A::~A() { delete impl; }void A::interface() { impl-\u0026gt;some_dirty_work() }
nested class清晰地表明了从属关系,如linked_list::node,比起两个单独的linked_list和node类更清楚。缺陷:nested class的编译器bug比较多,如果用旧版本的编译器要小心代码的连贯性在nested class复杂的情况下会下降,这个例子:class A { private: int member1, member2; // continue reading: public: class B { //100+ lines // //... }; class C { //100+ lines // //... class CX { //100+ lines }; }; B b; C c; void foo() { memberX.bar(); } //What is memberX?};
如果类B要对外使用,A::B的形式对于用户(特别是在有自动补全的情况下)非常不方便。应该使用有共同前缀的类名+A类内typedef B类取出前缀名的形式:class SyntaxTree;class SyntaxNode //exposed to user{ //...};class SyntaxTree{ public: typedef SyntaxNode Node; //...};
推荐阅读
- 非计算机专业想要利用课余时间深入自学C++,想要找到比较体面的工作大概需要啥水平
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- C、C++、java等编程语言都有哪些坑
- c++写http服务器不用cgi和apache该用啥
- 看完c++ primer plus 还有必要再买本c++ primer看吗?
- 有人可以把C,C++,Python等编程语言开发出来,而我们却难以精通,这说明了啥问题
- MFC能用其他语言来替代吗?
- 看完一本C++书后应该学啥
- C++程序测试软件有哪些比较好
- 关于 lua 使用c++对象 并添加自定义属性的内存管理问题