《C++語言程式設計基礎》學習類與物件之多檔案結構和預編譯命令
C++程式的一般組織結構: 一個工程可以劃分為多個原始檔,例如: 類宣告檔案(.h檔案) 類實現檔案(.cpp檔案) 類的使用檔案(main()所在的.cpp檔案) 利用工程來組合各個檔案。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; //靜態資料成員 };
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;
}
main.cpp
#include"Point.h" #include<iostream> using namespace std; int main() { Point a(4, 5); //定義物件a,其建構函式使count增1 cout << "Point A: " << a.getX() << ", " << a.getY(); Point::showCount(); //輸出物件個數 Point b(a); //定義物件b,其建構函式回使count增1 cout << "Point B: " << b.getX() << ", " << b.getY(); Point::showCount(); //輸出物件個數 return 0; }
外部變數: 如果一個變數除了在定義它的原始檔中可以使用外,還能被其它檔案使用,那麼就稱這個變數是外部變數。外部變數是指不在本程式檔案中定義的變數 檔案作用域中定義的變數,預設情況下都是外部變數,但在其它檔案中如果需要使用這一變數,需要用extern關鍵字加以宣告外部函式: 在所有類之外宣告的函式(也就是非成員函式),都是具有檔案作用域的。 這樣的函式都可以在不同的編譯單元中被呼叫,只要在呼叫之前進行引用性宣告(即宣告函式原型)即可。也可以在宣告函式原型或定義函式時用extern修飾,其效果與不加修飾的預設狀態是一樣的。 將變數和函式限制在編譯單元內
標準C++庫
標準C++類庫是一個極為靈活並可擴充套件的可重用軟體模組的集合。標準C++類與元件在邏輯上分為6種類型:
輸入/輸出類
容器類與抽象資料型別
儲存管理類
演算法
錯誤處理
執行環境支援編譯預處理:
#include 包含指令 將一個原始檔嵌入到當前原始檔中該點處。 #include<檔名> – 按標準方式搜尋,檔案位於C++系統目錄的include子目錄下 #include"檔名" – 首先在當前目錄中搜索,若沒有,再按標準方式搜尋。#define 巨集定義指令 定義符號常量,很多情況下已被const定義語句取代。 定義帶引數巨集,已被行內函數取代。 #undef 刪除由#define定義的巨集,使之不再起作用。
條件編譯指令——#if 和 #endif #if 常量表達式 //當“ 常量表達式”非零時編譯 程式正文 #endif
條件編譯指令——#else #if 常量表達式 //當“ 常量表達式”非零時編譯 程式正文1 #else //當“ 常量表達式”為零時編譯 程式正文2 #endif
條件編譯指令——#elif #if 常量表達式1 程式正文1 //當“ 常量表達式1”非零時編譯 #elif 常量表達式2 程式正文2 //當“ 常量表達式2”非零時編譯 #else 程式正文3 //其他情況下編譯 #endif
條件編譯指令 #ifdef 識別符號 程式段1 #else 程式段2 #endif 如果“識別符號”經#defined定義過,且未經undef刪除,則編譯程式段1;其中經defined定義過,不要求賦值 否則編譯程式段2。
#ifndef 識別符號 程式段1#else 程式段2#endif 如果“識別符號”未被定義過,則編譯程式段1; 否則編譯程式段2。
如果沒有被定義過某個識別符號,程式可能被多次包含,造成一些類、函式、常量等被重複定義的問題。