文法及代碼分析:
1、初始代碼分析
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl; // Cout輸出
return 0; // 正常退出
}
- 以 # 開頭的語句成為預處理指令
- #include 語句不是必須的,如果一旦在程式中存在該語句,就必須放置在程式開始處。
1.1 iostream
- io 即 input & output (輸入 & 輸出)
- Stream 即 流
1.2 using namespace std
- using 即 使用
- NameSpace 即 命名(name)空間(space)
- NameSpace 主要用于避免名稱的重複
- 命名空間是一項C++特性,用來在編寫大型程式時組織源代碼
早些的編碼将标準庫功能定義在全局空間裡(是以并不需要注明使用什麼命名空間),聲明在帶.h字尾的頭檔案裡。
C++标準為了和C差別開,也為了正确地使用命名空間,規定頭檔案不使用字尾.h。
是以,當使用<iostream.h>時,相當于在C中調用庫函數,使用的是全局命名空間,也就是早期的C++實作。
當使用<iostream>時,該頭檔案沒有定義全局命名空間,必須使用namespace std,指明在哪裡的命名空間,這樣才能使用類似于cout這樣的C++辨別符。
1.3 cout << "Hello world!" <<endl:
- << 符号表示把字元串 ”Hello World“ 發送給 Cout 列印
- Endl是控制符,表示重起一行(\n)
- 該指令表示将字元串插入到輸出流中
- Endl(ENDL)表示 End Line,
- Endl 與 \n 都可表示換行,但Endl會在結束時清空緩沖區(立刻輸出,結束改行語句),而 \n 僅是單純換行,清空後不會影響下行輸出。
從概念上看,輸出是一個流,可以了解成從程式流出的一系列字元
Cout 對象(在此可了解為螢幕)表示這種流,在 iostream 中可以定義它
Cout 右側的 << 符号表示插入運算符,可以将右側資訊插入到流中
2、關于【面向對象】
面向對象的特性:封裝、繼承、多态
對象的三大屬性:狀态,行為,辨別符
封裝(Encapsulation):隐藏對象的屬性和實作細節,僅對外提供公共通路方式,将變化隔離,便于使用,提高複用性和安全性。
繼承(Public):提高代碼複用性;繼承是多态的前提。
多态(Polymorphism):在面向對象語言中,接口的多種不同的實作方式即為多态。
對象:對象就是一個概念,把所有的事物都稱作為“對象”,萬物皆對象。
屬性:屬性就是該事物的組成部分,所有可以被包含的部分都稱為“屬性”,一切皆包含屬性。
标志符:标志符是一個對象的屬性,他區分了這個對象與所有其他對象。
面向過程的優、缺點:
優點:性能比面向對象好,因為類調用時需要執行個體化,開銷比較大,比較消耗資源。
缺點:不易維護、不易複用、不易擴充。
面向對象的優、缺點:
優點:易維護、易複用、易擴充,由于面向對象有封裝、繼承、多态性的特性,可以設計出低耦合的系統,使系統 更加靈活、更加易于維護。
缺點:性能比面向過程差。
舉例:
“有一天你想吃魚香肉絲了,怎麼辦呢?你有兩個選擇:
1、自己買材料,肉,魚香肉絲調料,蒜苔,胡蘿蔔等等然後切菜切肉,開炒,盛到盤子裡。
2、去飯店,張開嘴:老闆!來一份魚香肉絲!
看出來差別了嗎?
一就是面向過程,二是面向對象。
面向對象有什麼優勢呢?首先你不需要知道魚香肉絲是怎麼做的,降低了耦合性。
如果你突然不想吃魚香肉絲了,想吃洛陽白菜,對于一你可能不太容易了,還需要重新買菜,買調料什麼的。
對于二,太容易了,大喊:老闆!那個魚香肉絲換成洛陽白菜吧,提高了可維護性。
總的來說就是降低耦合,提高維護性!
面向過程是具體化的,流程化的,解決一個問題,你需要一步一步的分析,一步一步的實作。
面向對象是模型化的,你隻需抽象出一個類,這是一個封閉的盒子,在這裡你擁有資料也擁有解決問題的方法。需要什麼功能直接使用就可以了,不必去一步一步的實作,至于這個功能是如何實作的,管我們什麼事?我們會用就可以了。
面向對象的底層其實還是面向過程,把面向過程抽象成類,然後封裝,友善我們我們使用的就是面向對象了。”