C++ 怎么组织头文件和实现文件
C++ 如何组织头文件和实现文件?
类的结构大致如下,当前的物理和逻辑依赖成线型 :
C1.cpp依赖C1.h
C2.h依赖C1.h
C2.cpp依赖C2.h
C3.h依赖C2.h
C3.cpp依赖C3.h
------解决思路----------------------
1.怎么会不能#include头文件呢?
2.
3. 第三个问题看楼下
------解决思路----------------------
第三个问题,既然你要分开,就不用内部类来写。可以在C2中写一个C2_1的实例,然后直接调用即可。
------解决思路----------------------
首先,你这个是模板编程
模板编程通用做法,模板声明和实现都可以在一个头文件里完成,这是做法一
如果要把实现和声明分开,建议在头文件中#include cpp文件,或者可以使用预处理兼顾两中做法,对此有疑问,建议看看
《C++模板编程》
以上是第一种解决问题的思路
下面说第二种,出发点在与头文件自满足,楼主可百度之
第三种,减少编译以来,使用PImpl模式,使用指针就可以声明二不需要头文件包含
点到为止,楼主仔细研究。三种都深入学习一下,就会成长不少
类的结构大致如下,当前的物理和逻辑依赖成线型 :
C1.cpp依赖C1.h
C2.h依赖C1.h
C2.cpp依赖C2.h
C3.h依赖C2.h
C3.cpp依赖C3.h
main.cpp (在 Qt IDE, clang编译器上)
#include <C1.cpp>
#include <C2.cpp>
#include <C3.cpp>
// 第一个问题 为什么不能是 .h
//以前VS只要加入了工作路径就可以了,Qt编译器不知道该怎么加路径
C2.h (在 Qt IDE, clang编译器上)
template<typename T>
class C2 {
protected :
//第二个问题 模板类友元函数的实现只能在类声明里吗
friend void func(int i, const C2& c2) {
return;
}
class C2_1 {
// 声明 50 行, 实现 300 行在 C2.cpp
};
// 声明 60行, 实现 300 行在 C2.cpp
T data;
};
// 第三个问题 现在想将 C2 和 C2_1 的实现文件分开(独立出 C2_1)该怎么组织
------解决思路----------------------
1.怎么会不能#include头文件呢?
2.
template<typename T>
class C2 {
protected:
template<typename S>
friend void func(int i, const C2<S>& c2) { //声明必须放在类内
return;
}
class C2_1 {
};
T data;
};
template<typename T>
void func(int i, const C2<S>& c2){ //定义可以放在类外
return;
}
3. 第三个问题看楼下
------解决思路----------------------
第三个问题,既然你要分开,就不用内部类来写。可以在C2中写一个C2_1的实例,然后直接调用即可。
#include<C2_1.h> //比如你把类声明写在这里了
template<typename T>
class C2 {
protected:
template<typename S>
friend void func(int i, const C2<S>& c2);
C2_1 c2_1;
T data;
};
------解决思路----------------------
首先,你这个是模板编程
模板编程通用做法,模板声明和实现都可以在一个头文件里完成,这是做法一
如果要把实现和声明分开,建议在头文件中#include cpp文件,或者可以使用预处理兼顾两中做法,对此有疑问,建议看看
《C++模板编程》
以上是第一种解决问题的思路
下面说第二种,出发点在与头文件自满足,楼主可百度之
第三种,减少编译以来,使用PImpl模式,使用指针就可以声明二不需要头文件包含
点到为止,楼主仔细研究。三种都深入学习一下,就会成长不少