1. 程式人生 > >【CPP基礎】面向物件的程式設計思想 + 輸入和輸出相關(一)

【CPP基礎】面向物件的程式設計思想 + 輸入和輸出相關(一)

引自高翔博士的《視覺SLAM十四將》:

用著用著才發現C++和Linux才是我的真愛。

開始做人工智慧和人工智慧相關的人和團體越來越多,雖然初期學習中會發現對於絕大多數沒有什麼程式設計基礎的人來說Python是一個非常便於上手的語言,而且甚多開源構架都有基於Python的介面,所以包括我自己在內都在Python花了不少精力。本文的重點不是要拉CPP和Python掐架,只是CPP裡對於各種功能的靈活實現,以及強大的功能對於研究以及開發相關應用實在有太多優勢。誠然,CPP可以說是一門最為艱難的語言,木有十年苦工怕是沒誰能拍著胸脯說“精通”二字吧。這個【CPP基礎】系列,是本人一年前觀看李佳雨的CPP課程的筆記的一個review。對的,學習就是這樣,不停的review,溫故而知新。

  

1. C++語言簡介

1.1 C++是一種語言,僅僅是它的語法特性標準類庫就已經是一門非常高深的課程,所以在開始學習的時候,必須先打好基礎。

1.2 C++特點OO思想

1.2.1 C++的特點:

※C語言有一個優點,即它的速度可以很快,寫出來的程式可以很精煉、簡單、小巧,不用為了解決一個問題浪費太多經歷。

※ C和C++相比較,C++就經常會為了解決某個問題繞一個大圈,所以程式碼量相對較大,並且裡邊有一些不是必須的程式碼。

※ 但C++的優勢在於它會針對不同的物件進行例項化,這就是所謂的Object Oriented(OO)思想

1.2.2 OO思想:

OO面向物件思想:在面對物件的思想中,任何事物都可以被看做一個物件。一個再複雜的模型結構都是由千千萬萬個物件組成的。這是根本思想。而對每個物件,抽想起來最終可以分為兩個要素:屬性行為

※ 在面對物件程式設計中,程式設計師不再面對一個個函式和變數,而是要放眼大局,面對一個個物件來看問題。

※ 每個物件都是一個完整的獨立個體,它是由相關的屬性行為組合而成的,與外界分隔

※ 面對物件是當前軟體開發的主流,其概念和引用造詣超越了程式設計和軟體開發本身而擴充套件到更加寬廣的範圍。

1.2.3 OO實現的特點

1) 封裝:封裝意味著把物件的屬性和方法結合成一個獨立的系統單位

,並儘可能隱藏物件的內部細節

封裝是面向物件思想描述的基礎,從此程式設計師面對的就不再是許多複雜函式和過程實現,而是少數具有行為能力的個體例項

2)抽象:抽象的過程是對具體問題進行概括的過程,是對一類公共問題進行統一描述的過程。為了使某些必要的資訊得意順利的交流,設計者必須進行一個抽象過程,就如同一個協議,一個得到所有參與過冬的有效個體支援的協議。

3) 繼承子類物件擁有與其基類相同的全部屬性和方法,稱為繼承

4) 多型:多型是指在基類中定義的屬性和行為被子類繼承後,可以具有不同的資料型別或者表現行為等特性。

   

2. C++的輸入和輸出方法

2.1 在函式呼叫中,如果形參是一個數組,在傳遞過程中,從主函式到函式模組傳遞的是該陣列的首地址,也就是說,在這個過程中,該陣列被當成指標來處理。

2.2 cout是一個輸出流物件,它是“consoleout控制檯輸出)”的縮寫。是屬於類的物件ostream類iostream標頭檔案中定義。輸出流就是一個概念。

2.3“usingnamespacestd;

  • 這條指令是C++的一個新概念“名稱空間”;
  • C++標準庫所使用的所有識別符號(即類函式、物件等的名稱)都是在同一個特殊的名稱空間std)中來定義的。
  • 如果沒有使用這條指令,將要使用std::cout這樣的語法來呼叫輸出流物件。

2.4 “endl”是一個結束標誌,否則所有的流都會流向目標。

2.5 過載:C++的的一個特點,具體指允許按照不同的方式使用同一個操作符。

3. 如上程式的分析(Cvs C++)

3.1 這個程式使用了流物件cin。這個物件的型別istream,它知道如何從使用者終端讀取資料。

3.2 cin >> i;cin輸入操作符又稱提取操作符,它一次從輸入流物件cin提取一個整數

3.3 當用戶進行鍵盤輸入時,對應的字元將輸入到作業系統的鍵盤緩衝區中。

3.4 當用戶輸入“Enter”時,作業系統把鍵盤緩衝區的內容傳輸到cin流的內部緩衝區,“>>”操作符隨後從這個緩衝區提取需要的資訊。

3.5 阻塞:如使用者不進行鍵盤輸入,程式會阻塞的特性。這裡是(blocking)IO阻塞。

3.6 “>>”最初定義為右移操作符,它在C++中進行了過載,當它按照這裡所示的方式使用時,它就用於從輸入流物件提取資訊。

這個操作符對所有內建資料型別都進行了過載,所以它可以從輸入流物件提取出intfloatdouble型資料,也可以提取字串資料。

3.7 在語句while(cin >> i)中,表示式cin >> i返回輸入流物件本身,也就是cin。但是,如果到達了檔案尾或者提取操作符遇到一個非法值,這個返回值將是false(一般false就是0)。

3.8 C和C++在宣告變數的事實上有點不同,C++允許在程式的任意位置宣告變數。這提高了大型C++程式的可讀性,因為這樣子就可以在實際需要使用變數的時候才來宣告它們。