c – 包含在头文件与forward-declare中,并包含在.cpp中
发布时间:2020-12-16 05:30:49 所属栏目:百科 来源:网络整理
导读:我有一个B类,我想打电话给A类成员.所以: 1. //a.h class B; class A { private:B* m_p; }; //a.cpp#include b.h 2. // a.h #include B.h class A { private: B * impl_; }; 当一个没有太多依赖关系的小项目发展的时候,哪个方式更好? 解决方法 你的第一种做
我有一个B类,我想打电话给A类成员.所以:
1. //a.h class B; class A { private: B* m_p; }; //a.cpp #include b.h 2. #include <B.h> class A { private: B * impl_; }; 当一个没有太多依赖关系的小项目发展的时候,哪个方式更好? 解决方法
你的第一种做法意味着在a.h中,B类的存在是已知的,而不是它的定义.这限制了你在a.h内可以做些什么.例如,您可以具有类型B *的变量,但不能具有类型B的变量(因为对于B类变量的声明,编译器必须能够看到B的完整定义).另外,如果你有变量B *类型,你不能取消引用指针(因为也是,B的定义必须是已知的).
因此,您的第二选择 – 没有这些问题 – 是首选,这是大多数人大部分时间使用的. 只有第一种方法可能有用的特殊情况.例如: >如果.h文件相互包含(但是你可能会遇到一些进一步的问题,也涉及到包围守卫,这通常是困难的并且被避免);>如果b.h非常大且复杂,那么您可能希望尽可能避免包含它,因为它会减慢编译过程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |