1. 程式人生 > >認識C++(C++學習筆記 4)

認識C++(C++學習筆記 4)

目前主要參考的書是《C++ Primer》第三版
學校上課用的是《C++面向物件程式設計教程》第三版

一、 C++的起源

C語言的侷限性:

  1. 型別檢查機制相對較弱,使得程式中的一些錯誤不能再編譯階段由編譯器檢查出來
  2. 幾乎沒有支援程式碼重用的語言結構
  3. C語言是面向過程1的程式語言,不能滿足運用面向物件2方法開發軟體的需要,不適合大型程式,當程式的規模到達一定的程度時,程式設計師就很難控制程式的複雜性。

C++就是為了解決上述問題而設計的。
美國AT&T貝爾實驗室的本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)博士在20世紀80年代初期發明並實現了C++(最初這種語言被稱作“C with Classes”)。

二、C++的特點

主要表現在兩個方面:

  1. 全面相容C,並對C的功能作了不少的擴充
  2. 增加了面向物件的機制

C++語言最有意義的方面是支援面向物件的特徵,然而,由於C++與C語言保持相容,使得C++不是一個純正的面向物件的語言,C++既可用於面向過程的結構化程式設計,也可用於面向物件的程式設計。

三、面向物件程式設計

(1)什麼是面向物件程式設計?

程式=物件+訊息
面向物件程式的基本元素是物件
面向物件的主要結構特點是:
  1)程式一般由類的定義和類的使用兩部分構成;
  2)程式中的一切操作都是通過向物件傳送訊息來實現的,物件接收到訊息後,啟動有關方法完成相應的操作。

(2)什麼是物件?什麼是類?物件與類的關係是什麼?

  物件一般可以表示為:屬性+行為,一個物件往往是由一組屬性和一組行為構成的。
  類是對具有相同的屬性和行為的物件操作的一類物件的描述。
  類和物件之間的關係是抽象與具體的關係。類是多個物件進行綜合抽象的結果,一個物件是類的一個例項。

(3)幾種典型的面向物件程式設計語言?

  1)Smalltalk語言
  2)Simula語言
  3)C++語言
  4)Java語言
  5)C#語言

(4)面向物件程式設計的4個基本特徵?

  1)抽象
  抽象是通過特定的例項(物件)抽取共同性質後形成概念的過程,是將有關事務的共性歸納,集中的過程。例如,在設計一個成績管理程式的過程中,只關心學生的姓名,學號,成績等,而對他的身高,體重等資訊就可以忽略。而在學生健康資訊管理系統中,身高,體重等資訊必須抽象出來,而成績可以忽略。

  2)封裝
  封裝是指把某個事物包圍起來,使外界不知道該事物的具體內容,在面向物件程式設計中,封裝是指把資料和實現操作的程式碼集中起來放在物件內部,並儘可能隱蔽物件的內部細節。例如,在使用洗衣機時,人們只需要按下指定的按鈕就可以讓洗衣機完成相應的工作,而無法(也沒必要)操作洗衣機的內部電路和機械控制部件,因為它們被裝在洗衣機裡面,這對使用者來說是隱蔽的,不可見的。

  3)繼承
  繼承表達的是類之間的相關關係,這種關係使得某類物件可以繼承另外一類物件的特徵和能力。例如,現實生活中,我們繼承了我們父母的一些特徵,如種族,血型,眼睛的顏色等,父母是我們所具有的屬性的基礎。
  假設有兩個類A和B,若類B繼承類A,則類B包含了類A的特徵(包含資料和操作),同時也可以加入自己所特有的新特性,這時稱被繼承類A為基類或父類,而繼承類B為A的派生類或子類。同時還可以說,類B是從類A中派生出來的。

  4)多型
  多型性指不同的物件收到相同的訊息時執行不同的操作。可以參考例子:
https://www.cnblogs.com/jaffee-L/p/9717253.html

四、C++程式格式

(1)初步認識C++程式

例子: 計算兩個整數的和

#include<iostream>
using namespace std;

int main(){
        int x,y,sum;
        cout<<"Please input two integers:"<<'\n';
        cin>>x;
        cin>>y;
        sum=x+y;
        cout<<"x+y="<<sum<<endl;
        return 0;
}

1、標準C++要求在主函式前面寫上返回值型別為int,若一個函式沒有指出返回值型別,C++預設該函式的返回值型別是int型。
2、程式的"#include<iostream>“是編譯預處理命令,用來指示編譯器在對程式進行預處理時,將檔案iostream的程式碼嵌入到程式中該指令所在的地方。
3、使用”#include<iostream>“時必須加上"using namespace std”,否則編譯時將出錯。

(2)C++程式的結構特性

一個面向物件的C++程式一般是由類的宣告和類的使用兩大部分構成。
例子: 帶類的C++程式

#include<iostream>
using namespace std;

class Student{
private:
        int num;
        int score;
public:
        void setdata(){
                cout<<"num and score:";
                cin>>num;
                cin>>score;
        }
        void display(){
                cout<<"num="<<num<<endl;
                cout<<"score="<<score<<endl;
        }
};
Student stud1,stud2;
int main(){
        stud1.setdata();
        stud2.setdata();
        cout<<"student1:"<<endl;
        stud1.display();
        cout<<"student2:"<<endl;
        stud2.display();
        return 0;
}

通過宣告類,構建了程式所要完成的功能,體現了面向物件程式設計的思想。在該程式中首先聲明瞭類Student,然後再主函式中建立了類Student的物件stud1和stud2,通過向物件傳送訊息,呼叫成員函式setdata( )和display( ),完成所需要的操作。

(3)C++程式的編輯、編譯、連線和執行

開發C++程式c++程式的開發通常要經過編輯、編譯、連線、執行除錯這幾個步驟:編輯是將源程式輸入到計算機中,生成字尾為.cpp的磁碟檔案。編譯是將程式的原始碼轉換為機器語言程式碼。但編譯後的程式還不能有計算機執行,還需要連線。連線是將目標檔案以及庫中的某些檔案連在一起,生成一個字尾為.exe的可執行檔案。最後,還要對程式進行執行、除錯。( 這段話來自:https://blog.csdn.net/genian123/article/details/75333173


  1. 面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候一個一個依次呼叫就可以了。 ↩︎

  2. 面向物件是把構成問題事務分解成各個物件,建立物件的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。 ↩︎