C++代码,大侠们都来看一下

来源:百度知道 编辑:UC知道 时间:2024/07/04 16:21:11
我看的是同学的代码。他是用工程做的,有一部分,我没看明白,就是编译预处理部分的,你们看看这个是什么东西,是怎么出现的,我手头的编译器是VC6.0
请大侠们详述一下步骤,本人绝对不吝啬分数
#if !defined(AFX_BASE_H__F90BF1FD_FDC4_4E4C_B604_F1CB695EFA04__INCLUDED_)
#define AFX_BASE_H__F90BF1FD_FDC4_4E4C_B604_F1CB695EFA04__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include<string>

using namespace std;

class Base //属性类表示属性行
{
private:
string name; //属性名称
int length; //数值长度
int form; //表示数据域(info)中的数据类型 0 -- string 型 1 -- 整型
public:
Base();
virtual ~Base();
void set_name(const string n); //设置属性名
void set_length(const int l); //设置长度(当类型是0时)
void set_form(const int f); //设置类型 0 -- string 型 1 -- 整型
const string get_name();
const int get_length();
const int get_form();

};

#endif // !defined(AFX_BASE_H__F90BF1FD_FDC4_4

作用是为了防止重复定义,几位说的都很明白,我这就浪费时间和你细说一二。
比如你有三个文件,a.h b.h main.h
main.h为主程序,因为用到a.h和b.h中的定义,所以,在文件头
要加入
#include "a.h"
#include "b.h"
这个能理解不?

好了,再说a.h
因为a.h要用到b.h中的定义,所以在a.h中要加入
#include "b.h"
这也好理解吧!
再说b.h吧
b.h中定义了一个类:
class X
{
//code:
}

如果不作任何处理,我们发现编译时候会报错,说x类被重复定义了,为什么?
就在于主文件中的两个包含文件:
#include "a.h"
#include "b.h"

因为在调用#include "a.h"时候编译器发现a.h中有条#include "b.h"那么他会自动把b.h包含进来,而b.h中定义了类X

再调用#include "b.h"时候又有一个定义类X,这样编译器报错。

为了解决这个问题,引进了预编命领
#if !defined XXX
//
#define XXX
//code:
#endif

这一系列命令作用是,如果XXX被没有定义过,执行#include及后面代码段:直至#endif
如果定义过,直接跑到#endif后,XXX,code不会被再次执行了。

b.h中定义了一个类:修改成如下:
#if !defined XXX
#define XXX

class X
{
//code:
}
#endif
这里面我们再回过头来看我们的main.h