文章目錄
第一章:預備知識
C++三件法寶
- C++繼承了C語言高效、簡介、快速和可移植性的傳統;
- C++面向對象(OOP)的特性帶來一種全新的編程方法;
- C++模板特性提供另一種全新的編程方法——泛型編程;
C++簡史
C語言
20世紀70年代早起,貝爾實驗室的Dennis Ritchie 致力於開發UNIX操作系統。初始使用匯編這類的low-level語言進行編程,直接操作硬件。高級語言的誕生解決了低級語言的各種缺點,如效率等等,高級語言通過編譯器(IDE)被編譯爲計算機內部二進制語言,這樣,就可以在不同的平臺上使用不同的編譯器進行程序的二進制化。Ritchie希望有一種語言將低級語言的效率、硬件訪問能力和該機語言的通用性、可移植性融合入在一起,於是C語言被開發出來。
C語言在早期和當時其他主流語言同樣是過程性的(procedural),後來計算機科學家開發出一種更有序的編程方法——結構化編程(structured programming)。另一個新原則是自頂向下(top-down)的設計。
數據+算法=程序
OOP面向對象
雖然結構化編程理念提高程序的清晰度、可靠性,並且便於維護,但在編寫大型程序時,仍然面臨挑戰,OOP提供一種新的方法,試圖讓語言來滿足問題的要求,其理念是設計與問題的本質相對應的數據格式。
類是一種規範,它描述了新型的數據格式,對象是根據這種規範構造的特定數據結構。OOP的方法首先是設計類,但是不僅僅是數據和方法的合併,還包括其他一些方面,例如多態、信息隱藏、繼承等。設計可靠、有用的類是一項艱鉅的任務。
C++泛型編程
泛型編程(generic programming)是C++支持的另一種編程模式,
泛型是通過參數化類型來實現在同一份代碼上操作多種數據類型。利用“參數化類型”將類型抽象化,從而實現靈活的複用。
泛型的優點:
1.可以做到最大的代碼重用、保護類型的安全以及提高了程序運行的性能;
2.可以創建集合類;
3.可以創建自己的泛型接口、泛型方法、泛型類、泛型事件和泛型委託。
4.可以對泛型類進行約束,以訪問特定數據類型的方法。
5.關於泛型數據類型中使用的類型的信息,可在運行時通過反射獲取。
// generic programming
class Program
{
static void Main(string[] args)
{
int obj1 = 2;
var task = new Task<int>(obj1);
Console.WriteLine(task.obj);
string obj2 = "這是個泛型";
var task2 = new Task<string>(obj2);
Console.WriteLine(task2.obj);
Console.ReadKey();
}
}
class Task<T>
{
public T obj;
public Task(T t)
{
this.obj = t;
}
}
程序創建的步驟
源代碼——編輯器——目標代碼——鏈接程序(啓動代碼+庫代碼)——可執行代碼
C++標準
C++11 & C++98
關於c++11的常用新特性,這篇博客裏面有介紹C++11常用特性
第二章:初步使用
結構及main函數
- #include 預處理器編譯指令
- using namespace 編譯指令
- 運行C++程序時,函數是從main開始執行
- 函數頭(作爲接口) int main(){ },返回值爲int型
- 函數名main(形參列表arguement/parameter list)
- 無參數:int main() 與int main(void) 是一致的,表示函數都不接受任何參數
- void main() +省略renturn返回 :不返回任何值,但他不是當前標準強制的一個選項,所以在有的系統無法工作,應避免。
C++頭文件新式類型: 無.h後綴與輸入輸出
iostream.h文件所定義的類和對象都是在全局空間中的,可以直接使用,然而iostream中的都是被放在了名稱空間中,如果需要使用,則需要using namespace,然後可以直接使用cout。還有一種偷懶的方法,即using std::cout 這樣也可以直接使用cout,不建議哈;
如果省略using namespace 命令,則需要在使用類的地方前面加上名字,例如std::cout;
(C語言中只有string特殊,問題在於C++要兼容C的標準庫,而C的標準庫裏碰巧也已經有一個名字叫做“string.h”的頭文件,包含一些常用的C字符串處理函數,比如strcmp。 這個頭文件跟C++的string類沒有關係,所以並非“升級版本”,他們是毫無關係的兩個頭文件。)
cmath: sqrt()
- cout下 <<運算符的重載
- std 中的endl控制符換行,舊式換行\n。使用情況:cout<<“How are you?\n”<<“I am fine !”<<endl; \n可以減少輸入量。
C++語句
- 變量的聲明:聲明瞭它的數據類型和變量名,保證在後續使用變量時不會因爲拼寫錯誤而出現問題(聲明的原因)。
- 賦值語句:從右到左
自定函數使用例子
#include <iostream>
#include <cmath>
void simon(int); //聲明自定函數 一個參數且爲int型
int simon1(int);
int main(){
int a;
simon(3);
a = simon1(3); //返回爲int,a爲int
return 0;
}
void simon(int n)
{
.......
}