C++語言程序設計關鍵概念筆記

一級目錄

結構化程序設計

思路:

  • 自頂向下逐步求精
  • 程序結構按功能劃分爲形成樹狀結構的若干基本模塊
  • 各模塊功能簡單且獨立
  • 模塊內部由順序、選擇和循環3種基本結構
  • 模塊實現的具體方法是子程序

面向對象的方法

首先他將數據以及對數據的操作方法放在一起,作爲一個相互依存、不可分離的整體——對象。對同類型對象抽象出其共性,形成類。類中的大多數數據,只能用本類的方法進行處理。類通過一個簡單的外部接口與外界發生關係,對象與對象之間通過消息進行通信。

對象

系統用來描述客觀事物的一個實體,有一組屬性和一組行爲構成。

具有相同屬性和服務的一組對象的集合。

封裝

把對象的屬性和服務結合成一個獨立的系統單位,並儘可能的隱蔽對象的內部細節。

繼承

特殊類的對象擁有其一般類的全部屬性與服務,稱作特殊類對一般類的繼承。

多態

在一般類中定義的屬性或行爲,被特殊的類繼承之後,可以具有不同的數據類型或表現出不同的行爲。

面向對象的軟件開發

面向對象的軟件工程

  • 分析
  • 設計
  • 編程
  • 測試
  • 維護

信息的表示與存儲

信息:控制信息、數據信息
控制信息:指令、控制字
數據信息:數值信息、非數值信息
數值信息:定點數、浮點數
非數值信息:字符數據、邏輯數據

信息存儲單位

位bit、字節byte、字word、機器字長

原碼反碼補碼

反碼:原碼符號位不變,其餘取反;補碼=反碼+1

程序開發

源碼、目標程序、翻譯程序、彙編程序、編譯程序、解釋程序
程序編輯:.cpp
程序編譯:.obj 錯誤爲語法錯
程序連接:.exe 錯誤爲連接錯

變量

一般聲明變量時完成變量定義(分配內存單元),聲明外部變量例外。

符號常量

聲明時一定要賦值

const float PI = 3.14;
const float PI;
PI = 3.14;錯誤

sizeof

計算某類型對象所佔字節數

值傳遞與引用傳遞

值傳遞: int i 實參傳形參,形參的變化不會影響實參
引用傳遞: int &i 可以認爲該形參爲實參的另一個別名,影響實參值

內聯函數

不是調用函數,而是在編譯時將函數體嵌入此部分

inline double exam()
{
	return 1.5+1.5;
}
void main()
{
	double a=exam();//a=1.5+1.5
}

帶默認形參的函數

有默認形參的函數必須在形參最後

int add(int x = 0, int y = 0) //正確
int add(int x = 0, int y) //錯誤

函數重載

功能相近的函數在相同的作用域以相同函數名定義,形成重載。
重載函數的形參必須不同:個數不同或者類型不同
類型不同

int add(int a, int b);
int add(flaot a, float b);

個數不同

int add(int a, int b);
int add(int a, int b, int c);

類的成員包括數據成員和函數成員,訪問控制屬性有三種:
公有類型(public):定義了類的外部接口
私有屬性(private):只能由本類的成員函數訪問。若定義緊跟類名,則可以省略。
保護屬性(protect):與私有屬性類似,差別在於繼承過程對產生的新類的影響。
就像沒有報時和調整時間的時鐘,沒有任何接口的類無法使用。故要設計必要的外部接口。

對象

對象所佔的內存空間只用於存放數據成員,函數成員不在每一個對象中存儲。函數代碼只佔據一份空間。

類成員函數初始值

寫在類定義裏,不可寫在類外的函數裏。

內聯成員函數

減少調用開支,提高執行效率,但是會增加編譯後的代碼長度。
分爲隱式聲明和顯式聲明

構造函數

也是類的成員函數,將對象初始化爲一個特定的狀態,與類名相同,且沒有返回值。在被構建時自動調用。
若類中定義了構造函數並且帶有形參,則實例化時必須給出初始值,否則會產生錯誤。

構造函數重載:有參數和無參數

class clock()
{
	public:
		clock(int a, int b, int c);
		clock()
		{
			hour = 0;
			mintue = 0;
			second = 0;
		}
		void settime();
	private:
		int hour, mintue, second;
}
//其他函數省略
int main()
{
	clock c1(0,0,0);
	clock c2;
}

複製構造函數

public clock(clock &c) //類內

clock::clock(clock &c) //類外
{
	hour=c.hour;
}

析構函數

對象消失釋放內存

public:
	~clock(){}

類組合

類的組合描述就是一個類中內嵌另一個類的對象作爲成員的情況,並且在創建對象時首先被自動創建。既要對本類逇基本類型數據成員進行初始化,又要對內嵌對象進行初始化。

前向引用聲明

類a中用到類b,類b在後面定義,則對類b進行前向聲明class b;

UML語言(Unified Modeling Language)

public private protect
+ - #

對象下面畫橫線
依賴關係、作用關係(關聯)、包含關係(聚集和組合)
註釋

結構體

c++:結構體和類相似,有數據成員、函數成員,構造函數、析構函數、可以控制訪問權限,可以繼承支持多態等。唯一區別在於結構體與類具有不同的默認訪問控制屬性:類中未指定的成員其屬性爲private;結構體中方未指定的類型爲公有類型
c++爲什麼引入結構體:保持和c的兼容性(c中結構體只有定義數據成員,不能定義函數成員;c中屬性爲公有
c中structure一詞用來描述面向對象的抽象數據類型不貼切,加上c的struct根深蒂固,故選擇class一詞。
故一般用struct則數據成員一般都是公有屬性

聯合體union

聯合體的全部數據成員貢獻同一組內存單元,並且成員至多隻有一個是有意義的。一般存儲共有數據不定義函數

union name()
{
	公有成員
	protected:
		保護型成員
	private:
		私有成員
}

位域

一種允許將類中的多個數據成員打包,從而使不同成員可以共享相同的字節機制

作用域

對象的生存期

靜態生存期 static
動態生存期

類的靜態成員

靜態數據成員
靜態函數成員

類的友元friend

提供了不同類或者對象的成員函數之間、類的成員函數與一般函數之間進行的數據共享機制。

共享數據的保護

常對象

常成員函數

常數據成員

常引用

c++ 多文件結構與編譯預處理

編譯預處理

#include
#define
#undef
#if #endif
#ifdef
#ifndef
defined

數組

數組越界錯誤
行優先存儲:每行元素是按照列下標由小到大次序存放
當數組初始化未定義值,靜態生存期的數組被賦予0;動態生存期的數組每個初始值是不確定的。
聲明爲常量的數組必須給定初值。
使用數組名作爲函數參數,傳入的是地址。對函數形參的操作直接影響到實參的相應元素。

對象數組

數組裏每個都是對象

Clock a[2];

指針

數組名稱實際就是不能被賦值的指針。
可以聲明指向常量的指針,聲明指針類型的常量

空指針

int * p;
*p = 0;
or
int * p = NULL;

把數組作爲函數形參,等價於把指向數組元素的指針作爲形參

void f(int p[]);
void f(int p[3]);
void f(int *p) 

指針數組 數組指針

指針數組:數組裏每個元素都是指針
數組指針:指向數組的指針

指針作爲函數形參

指針型函數 指向函數的指針

指針函數:函數類型是指針,返回指針型結果
函數指針:指向函數的指針。存放指向函數的地址

對象指針

指向對象的指針,存放指向對象的指針地址。

this指針

用於指向正在被成員函數操作的對象

指向類的非靜態成員 & 靜態成員 指針

動態內存分配

內存泄漏:用new分配的內存必須delete加以釋放,否則會導致分配的內存無法回收,使得程序佔據的內存越來越大

被封裝的數組對象Vector

深複製與淺複製

字符數組存儲字符串

每個字符一個字節,末尾\0

char str[8]={'p','r','o','g','r','a','m','\0'};
char str[8]= "program";
char str[] = "program"; 

string類(操作符、成員函數等)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章