《C++ Primer Plus第六版》 學習筆記-第一章&第二章

第一章:預備知識

C++三件法寶

  1. C++繼承了C語言高效、簡介、快速和可移植性的傳統;
  2. C++面向對象(OOP)的特性帶來一種全新的編程方法;
  3. 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)
{
.......
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章