今天在看到一个.cpp文件,这个cpp类的定义和函数的实现写在一起,我就在想这样的有什么劣势。很明显,就是在包含的时候出现重复定义。
于是又想到当他们分离的时候,为什么不会出现重复定义呢?例如:
// 1.h
class A
{
int a;
}
// void int add(){}
//2.cpp
#include"1.h"
//3.cpp
#include"1.h"
void main()
{
}
既然2.obj和3.obj都包含有类A,但是为什么不会出现问题呢? 而如果加上函数add,为什么会出现重复定义呢?是不是思想有点奇怪了,在思考为什么不出现重复定义。
想了一会也想不通,就出去方便了一下,在出去途中,突然想到从类型上进行分析:
函数add是一个连接时期的东西;而类型A是编译时期的东西;从这个方面分析,这个问题太简单了......Mark一下:如果你在一个cpp中包含同一个头文件两次(没有#pragma once),也是会出现错误的,这是编译时期的重复定义。