1、头文件程序预防多次编译

两种方法

#pragma once是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。
#pragma once是编译器相关的,有的编译器支持,有的编译器不支持,具体情况请查看编译器API文档,不过现在大部分编译器都有这个杂注了。
#ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。

具体写法编辑

方式一:

#ifndef _SOMEFILE_H_
#define _SOMEFILE_H_
.......... // 一些声明语句
#endif

方式二:

#pragma once
... ... // 一些声明语句

2、头文件一般格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//k-truss.h
#pragma once
#include "stdafx.h"
using namespace std;

typedef pair<int, int> edgePair;
typedef unordered_map<edgePair, int, pairHash> edgeMap;

class Truss {

public:
int result; //结果
//int sup[105][105];
edgeMap sup; //边的支持度
set<pair<int, edgePair>> nonDecSup;

public:
Truss(); //构造函数
virtual ~Truss() {}; //虚函数

int TrussDecomposition(PUNGraph graph);
edgePair EdgePair(int u, int v);

protected:

private:


};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//k-truss.cpp
/*
k-truss.cpp : 定义控制台应用程序的入口点。
time: 2017.11.01
author: HanKin
university: WhuHan University
language: C++
other: Snap
*/

#include "stdafx.h"
#include "k-truss.h"

Truss::Truss() //构造函数
{

}

edgePair Truss::EdgePair(int u, int v)
{
if(u < v) return make_pair(u, v);
return make_pair(v, u);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//main.cpp
#include "stdafx.h"
#include "k-truss.h"
#define DEBUG

#ifdef DEBUG
int main(int argc, char *argv[])
{
//程序计时
clock_t startTime, endTime;
double runTime;
startTime = clock();

endTime = clock();
runTime = (double)(endTime - startTime);
printf("Run Time:%f\n\n", (runTime / CLOCKS_PER_SEC));
return 0;
}
#endif // DEBUG

3、构造函数

4、析构函数

5、私有、共有、保护变量