マルチファイル構造
1、プロジェクトは複数のソースファイルに分割することができ
- クラスの宣言ファイル(.hファイル)
- クラスの実装ファイル(.cppファイル)
- ファイル(機能メイン.cppファイル)クラスを使用します
2、技術の使用は、個々のファイルを結合します
//Point.h ,类的定义
#ifndef POINT_H
#define POINT_H
class Point {
public:
Point(int x = 0, int y = 0) : x(x), y(y) { count++; }
Point(const Point &p);
~Point() { count--; }
int getX() const { return x; }
int getY() const { return y; }
static void showCount();
private:
int x, y;
static int count;
//不能在类体中声明时初始化类的数据成员
//建议在类的构造函数中初始化数据成员
//只有整型或enum类型的 static const 数据成员可以在类体中初始化
};
#endif
//用预处理指令#ifndef、#define、#endif形成一个预处理器包装,可以防止将头文件多次包含在一个程序中
//Point.cpp ,类的实现
#include"Point.h"
#include<iostream>
using namespace std;
int Point::count = 0; //静态数据成员在类体外定义并初始化
Point::Point(const Point &p) : x(p.x), y(p.y) { //复制构造
count++;
}
void Point::showCount() {
cout << " Object count = " << count << endl;
}
//5_10.cpp,主函数
#include"Point.h"
#include<iostream>
using namespace std;
int main() {
Point a(4, 5);
cout <<"Point A: "<<a.getX()<<", "<<a.getY();
Point::showCount();
Point b(a);
cout <<"Point B: "<<b.getX()<<", "<<b.getY();
Point::showCount();
return 0;
}
1)外部変数
の変数が定義されている場合、それは、ソースファイルに加えて使用することができるが、他のファイルで使用することができ、その後、この変数を呼び出すことは外部変数で
、デフォルトで定義されたファイルスコープ変数、すべての外部変数、他のドキュメントでのexternキーワードこの変数を使用することが望ましいと宣言する必要がある場合
2)外部関数
すべてのクラスの関数が(すなわち、非メンバ関数)の外側に宣言され、ファイルがスコープ有する
別々のユニットにまとめることができます呼び出す関数のプロトタイプで声明限り通話、。変更デフォルト状態せず、その効果は同じである、EXTERN変形関数宣言プロトタイプまたは定義された関数をも用いることができる
3)コンパイル単位内に限定変数と関数
匿名の名前空間を使用して、匿名の名前空間を定義します変数および関数は、他の符号化部に露出されていない
匿名の名前空間に属する「名前空間{...}」囲まれた領域であります
namespace { //匿名的命名空间
int n;
void f() { n++; }
}
4)標準C ++ライブラリは、
標準C ++クラスライブラリを設定して非常に柔軟でスケーラブルな再利用可能なソフトウェアはモジュールである
論理的に6つのタイプに標準C ++クラスとコンポーネント。
- 入力/出力クラス
- 抽象データ型のコンテナ
- ストレージ管理のカテゴリ
- アルゴリズム
- エラー処理
- 動作環境のサポート
第二に、プリプロセッサ
伝統的に、記号定数前処理指令は、ヘッダの通常大文字の名前であり、交互の期間に下線が引か
1、#含む命令が含まれ
ている点現在のソースファイルにソースファイルを埋め込む
#include<文件名>
-標準的な方法を検索し、ファイルをCに位置し、++システムディレクトリの下にサブディレクトリを含める
#include"文件名"
-現在のディレクトリで検索し、そうでない場合は、標準の検索
2、#マクロ定義命令定義
シンボル定数を定義し、CONST定義文は多くの場合、交換された
マクロパラメータを定義し、インライン関数を置き換えられている
#undef
:もはや機能への#defineマクロ定義を削除
図3に示すように、条件付きコンパイルディレクティブ
1)の#ifと#endifの
#if(常量表达式)
程序正文 //当"常量表达式"非零时编译
#endif
2)の#else
#if(常量表达式)
程序正文1 //当"常量表达式"非零时编译
#else
程序正文2 //当"常量表达式"为零时编译
#endif
3)#elifの
#if(常量表达式1
程序正文1 //当"常量表达式1"非零时编译
#elif(常量表达式2)
程序正文2 //当"常量表达式2"非零时编译
#else
程序正文3 //其他情况下编译
#endif
4)の#ifdefおよび#ifndefの
#ifdef 标识符
程序段1
#else
程序段2
#endif
//如果"标识符"经#defined定义过,且未经undef删除,则编译程序段1;否则编译程序段2
#ifndef 标识符
程序段1
#else
程序段2
#endif
//如果"标识符"未被定义过,则编译程序段1;否则编译程序段2