作者按:我一般都是野路子學(xué)的C++儒搭,沒有系統(tǒng)的學(xué)習(xí)和使用過吠架,現(xiàn)在補(bǔ)充。
1搂鲫、C++編程常用技術(shù)
1.1 第一個(gè)C++程序
- 預(yù)處理語句=>#include
- <iostream.h>&<iostream>傍药、#include<>&#include ""
- <string> & <string.h>
1.2 函數(shù)
- 函數(shù)的定義
- C++面向?qū)ο蟮某绦蛟O(shè)計(jì)中,主函數(shù)以外的函數(shù)大多被封裝在類中魂仍。主函數(shù)或其他函數(shù)可以通過類對(duì)象調(diào)用類中的函數(shù)拐辽。
- 形參和實(shí)參的區(qū)別是:形參只是被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí)擦酌,立即釋放所分配的內(nèi)存單元俱诸。
- 函數(shù)重載
- C++允許用同一函數(shù)名定義多個(gè)函數(shù),但這些函數(shù)必須參數(shù)個(gè)數(shù)不同或參數(shù)類型不同赊舶。
- 函數(shù)模板
- 建立一個(gè)通用函數(shù)睁搭,其函數(shù)類型和形參不具體指定,而是用一個(gè)虛擬的類型來代表笼平,這個(gè)通用函數(shù)就是函數(shù)模板园骆。凡是函數(shù)體相同的函數(shù)都可以用這個(gè)模版來帶滴,而不用定義多個(gè)函數(shù)寓调。
- 在調(diào)用函數(shù)時(shí)锌唾,系統(tǒng)會(huì)根據(jù)實(shí)參的類型來取代模板中的虛擬類型。
- 用函數(shù)模板比函數(shù)重載更方便捶牢,但它只適用于函數(shù)個(gè)數(shù)相同而類型不同的情況鸠珠。
#include <iostream>
using namespace std;
template <typename T>
T min(T a, T b, T c)
{
if(a>b) a = b;
if(a>c) a = c;
return a;
}
int main()
{
int a = 1, b = 2, c = 3;
cout << min(a, b, c) << endl;
long long a1 = 100000000;
long long b1 = 200000000;
long long c1 = 300000000;
cout << min(a, b, c) << endl;
return 0;
}
1.3 數(shù)組
- 數(shù)組的定義
- 數(shù)組時(shí)相同類型數(shù)據(jù)的集合巍耗。
- 一個(gè)數(shù)組在內(nèi)存中占用的存儲(chǔ)單元是連續(xù)的,也就是說一個(gè)數(shù)組在內(nèi)存中占用一片連續(xù)的存儲(chǔ)單元渐排。
char str[10] = "book";
strlen(str) = 4
sizeof(str) = 10
- strlen和sizeof的區(qū)別
1??strlen是函數(shù)炬太,在運(yùn)行時(shí)才能計(jì)算,參數(shù)必須是字符型指針(char*)驯耻,且必須是以'\0'
結(jié)尾亲族。功能是返回字符串的長度。
2??sizeof()是運(yùn)算符可缚,在編譯時(shí)就計(jì)算好了霎迫。功能是計(jì)算數(shù)據(jù)空間的字節(jié)數(shù)。sizeof常用語返回類型和靜態(tài)分配的對(duì)像帘靡、結(jié)構(gòu)或數(shù)組占用的空間知给,返回值和對(duì)象、結(jié)構(gòu)或數(shù)組所存儲(chǔ)的內(nèi)容沒有關(guān)系描姚。
1.4 指針
- 指針的概念
- 內(nèi)存單元的地址和內(nèi)存單元的內(nèi)容涩赢。
- 數(shù)組與指針
- 在C++中,數(shù)組名代表數(shù)組第一個(gè)元素的地址轩勘。
- 數(shù)組指針/指針數(shù)組:數(shù)組指針指示一個(gè)指針變量筒扒,可以認(rèn)為是C語言里專門用來指向二維數(shù)組的,它占用內(nèi)存中一個(gè)指針的存儲(chǔ)空間绊寻;指針數(shù)組是多個(gè)指針變量花墩,以數(shù)組形式存在內(nèi)存當(dāng)中,占用多個(gè)指針的存儲(chǔ)空間.
int (*p)[n]
int* p[n]
優(yōu)先級(jí):() > [] > *
- 字符串與指針
字符數(shù)組/字符指針/字符指針數(shù)組/字符串變量
#include<iostream>
#include<string>
using namespace std;
int main()
{
// 字符數(shù)組
char str[] = "I am a programmer.";
// 字符指針
char* str1 = "qbc";
// 字符指針數(shù)組
char* str2 = {"hello world", "good bye"};
// 字符串變量
string str3 = "I am a programmer, too.";
return 0;
}
- 函數(shù)與指針
- 函數(shù)指針是指向函數(shù)的指針變量澄步。所以冰蘑,函數(shù)指針首先是個(gè)指針變量,而且這個(gè)變量指向一個(gè)函數(shù)驮俗。
- 函數(shù)指針的聲明方法
// 返回類型 (*指針變量名)([形參列表])
#include<iostream>
using namespace std;
int Mmin(int x, int y)
{
if(x > y) x = y;
return x;
}
int Mmax(int x, int y)
{
if(x<y) return y;
return x;
}
int mian()
{
int (*f) (int x, int y);
int a = 10, b = 20;
f = Mnin;
cout << (*f)(a, b) << endl;
f = Mmax;
cout << (*f)(a, b) << endl;
return 0;
}
1.5 引用
- 引用的定義
- 引用是一種變量類型懂缕,它用于為一個(gè)變量起一個(gè)別名。
- 引用作為參數(shù)
- 引用一個(gè)重要的作用就是作為函數(shù)的參數(shù)王凑。
類型標(biāo)識(shí)符 &引用名 = 目標(biāo)變量名
int a = 10;
int &r = a ;
- 常引用
- 引用型參數(shù)應(yīng)該在能被定義為const的情況下搪柑,盡量定義為const。
const 類型標(biāo)識(shí)符 &引用名 = 目標(biāo)變量名
1.6 結(jié)構(gòu)體索烹、公用體工碾、枚舉
1.6.1 結(jié)構(gòu)體、共同體百姓、枚舉的概念
- 結(jié)構(gòu)體/共用體/枚舉
1.6.2 結(jié)構(gòu)體渊额、共用體在內(nèi)存單元占用字節(jié)數(shù)計(jì)算
- union中變量共用內(nèi)存,應(yīng)以最長的成員變量占用的字節(jié)數(shù)為準(zhǔn),同時(shí)又要滿足共用體內(nèi)變量的默認(rèn)內(nèi)存對(duì)齊方式旬迹,必須以最長的數(shù)據(jù)類型占用的字節(jié)數(shù)對(duì)其火惊。
- struct中每個(gè)變量分開占用空間,且要遵循最后結(jié)構(gòu)體占用的字節(jié)數(shù)是8的倍數(shù)以對(duì)齊字節(jié)奔垦。
1.7 預(yù)處理
- 宏定義/文件包含/條件編譯/布局控制
- 常用宏定義命令
// #define 宏名 字符串
#define PI 3.1415926
// #define 宏 (參數(shù)列表) 宏
#define A(x) x
- 使用宏定義時(shí)屹耐,需要注意:
1??在簡(jiǎn)單宏定義的使用中,當(dāng)替換文本所表示的字符串是一個(gè)表達(dá)式時(shí)椿猎,需要加上括號(hào)惶岭,否則容易引起誤解和誤用。(先替換再計(jì)算原則)
2??類似的犯眠,在待參數(shù)的宏定義的使用中按灶,也容易引起誤解。
3??在使用簡(jiǎn)單宏定義時(shí)筐咧,當(dāng)字符串中不知一個(gè)符號(hào)時(shí)鸯旁,加上括號(hào)表示出優(yōu)先級(jí);如果是帶參數(shù)的宏定于嗜浮,則要給宏體中的每個(gè)參數(shù)加上括號(hào)羡亩,最后整個(gè)宏體上再加上一個(gè)括號(hào)。
- do...while(0)的妙用
- 條件編譯
#ifdef 標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
#if 表達(dá)式
程序段1
#else
程序段2
#endif
- extern "C" 塊的應(yīng)用
2危融、面向?qū)ο蟮腃++
結(jié)構(gòu)化編程,就是按照計(jì)算機(jī)的思維寫出的代碼雷袋,以功能為目標(biāo)來構(gòu)造應(yīng)用系統(tǒng)吉殃,無法解決重用、維護(hù)楷怒、擴(kuò)展的問題蛋勺。
面向?qū)ο缶幊痰闹饕枷胧前褬?gòu)成文藝的各個(gè)事務(wù)分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟鸠删,而是為了描述一個(gè)事物在解決問題中經(jīng)歷的步驟和行為抱完。對(duì)象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中刃泡,以提高軟件的重用性巧娱、靈活性和擴(kuò)展性。
面向?qū)ο螅悍庋b烘贴、繼承和多態(tài)禁添。
2.1 類與對(duì)象
- 類與對(duì)象的概念
- 類,是創(chuàng)建對(duì)象的模板桨踪,一個(gè)類可以創(chuàng)建多個(gè)相同的對(duì)象老翘;對(duì)象,是類的實(shí)例,是按照類的規(guī)則創(chuàng)建的铺峭。
- 屬性是一個(gè)變量墓怀,用來表示一個(gè)對(duì)象的特征;方法是一個(gè)函數(shù)卫键,用來表示對(duì)象的操作抗碰。對(duì)象的屬性和方法統(tǒng)稱為對(duì)象的成員(成員變量和成員函數(shù))绞蹦。
- 類是抽象的,不占用存儲(chǔ)空間的;而對(duì)象是具體的址芯,占用存儲(chǔ)空間的。
- 成員函數(shù)
- 成員函數(shù)中可以使用類中的任何成員瓢姻,包括私有的和公用的墩莫。
- 成員函數(shù)可以在類外定義,也可以在類內(nèi)定義羞福。
- 在類外定義成員函數(shù)時(shí)惕蹄,必須先在類中聲明,然后再在類外定義治专。在類外定義成員函數(shù)時(shí)卖陵,需要寫明
類名::函數(shù)名
。
- 類的封裝性
- 構(gòu)造函數(shù)
- 數(shù)據(jù)成員是不能在類中初始化的张峰,所以出現(xiàn)構(gòu)造函數(shù)泪蔫。
- 如果用戶自己沒有定義構(gòu)造函數(shù),那么C++系統(tǒng)就會(huì)自動(dòng)為其生成一個(gè)構(gòu)造函數(shù)喘批,只是這個(gè)構(gòu)造函數(shù)的函數(shù)體是空的撩荣,什么也不做,也不會(huì)進(jìn)行初始化饶深。
- 帶參數(shù)/帶默認(rèn)參數(shù)的構(gòu)造函數(shù)
- 構(gòu)造函數(shù)的重載
- 析構(gòu)函數(shù)
- 靜態(tài)數(shù)據(jù)成員
- 類的靜態(tài)數(shù)據(jù)成員擁有一塊單獨(dú)的存儲(chǔ)區(qū)餐曹,而不管創(chuàng)建了多少個(gè)該類的對(duì)象。如果只聲明類而未定義對(duì)象敌厘,類的一般數(shù)據(jù)成員不占內(nèi)存空間台猴,只有在定義對(duì)象時(shí)才會(huì)為對(duì)象的數(shù)據(jù)成員分配空間。但是靜態(tài)數(shù)據(jù)成員不屬于某一個(gè)對(duì)象俱两,所以在為對(duì)象所分配的空間中不包括靜態(tài)數(shù)據(jù)成員所占的空間饱狂。
- 類的靜態(tài)成員的聲明通常會(huì)放在一個(gè)類的實(shí)現(xiàn)文件中。
- C++靜態(tài)數(shù)據(jù)成員被類的所有對(duì)象所共享锋华,包括該類的派生類的對(duì)象嗡官。派生類對(duì)象與基類對(duì)象共享基類的靜態(tài)數(shù)據(jù)成員。如果改變靜態(tài)數(shù)據(jù)成員的值毯焕,則在各個(gè)對(duì)象中這個(gè)數(shù)據(jù)成員的值同時(shí)都改變衍腥。(全局變量)
- 靜態(tài)數(shù)據(jù)成員在程序編譯時(shí)被分配空間磺樱,到程序結(jié)束時(shí)釋放空間。婆咸、
- 靜態(tài)成員函數(shù)
- 如果要在類外調(diào)用公用的靜態(tài)成員函數(shù)竹捉,要用類名和域運(yùn)算符
::
:Box::volumn()。 - 靜態(tài)成員函數(shù)與非靜態(tài)成員函數(shù)的根本區(qū)別是:非靜態(tài)成員函數(shù)有this指針尚骄,二靜態(tài)成員函數(shù)沒有this指針块差。由此決定了靜態(tài)成員函數(shù)不能訪問本類中的非靜態(tài)成員。
#include <iostream>
using namespace std;
class CStudent{
public:
// 定義帶參數(shù)的構(gòu)造函數(shù)
CStudent (int n, int s): num(n), score(s){}
void total();
// 靜態(tài)成員函數(shù)
static double average();
private:
int num;
int score;
// 靜態(tài)數(shù)據(jù)成員所有對(duì)象共享倔丈,聲明靜態(tài)數(shù)據(jù)成員
static int count;
static int sum;
};
// 定義靜態(tài)數(shù)據(jù)稱焉
int CStudent::count = 0;
int CStudent::sum = 0;
// 定義非靜態(tài)成員函數(shù)
void CStudent::total()
{
// 非靜態(tài)成員函數(shù)中可以使用靜態(tài)數(shù)據(jù)成員憨闰、非靜態(tài)數(shù)據(jù)成員
sum+=score;
count++;
}
// 定義靜態(tài)成員函數(shù)
// 直接飲用靜態(tài)數(shù)據(jù)成員,不用加類名
double CStudent::average()
{
return sum*1.0/count;
}
int main()
{
CStudent stu1(1, 100);
stu1.total();
CStudent stu2(2, 98);
stu2.total();
CStudent stu3(3, 99);
stu3.total();
// 調(diào)用類的靜態(tài)成員函數(shù)
// 函數(shù)名前加上`類::函數(shù)名`
cout << CStudent::average() << endl;
}
- 對(duì)象的存儲(chǔ)空間
- 對(duì)象占用的存儲(chǔ)空間 = 非靜態(tài)成員變量+編譯器為了CPU計(jì)算做出的數(shù)據(jù)對(duì)齊處理 + 支持虛函數(shù)所產(chǎn)生的負(fù)擔(dān)
- 空類實(shí)例占用1byte空間
- 只有成員變量的類的存儲(chǔ)空間 = 所有成員變量占用存儲(chǔ)空間
- 有成員變量和靜態(tài)成員變量的類的存儲(chǔ)空間:靜態(tài)成員變量不占對(duì)象的內(nèi)存空間的需五。
- 只有一個(gè)成員函數(shù)的類的存儲(chǔ)空間: 成員函數(shù)不占對(duì)象的內(nèi)存空間
- 類中構(gòu)造函數(shù)泽示、析構(gòu)函數(shù)的空間占用情況:同上飒炎。
- 類中有虛的析構(gòu)函數(shù)的空間計(jì)算:編譯器為了支持虛函數(shù),會(huì)產(chǎn)生額外的負(fù)擔(dān),這正是指向虛函數(shù)表的指針的大小。如果一個(gè)類中有一個(gè)或多個(gè)虛函數(shù)朦肘,沒有成員變量咏花,那么類相當(dāng)于含有一個(gè)指向想虛函數(shù)表的指針刘急,占8byte检碗。
- 繼承空類和多重繼承空類存儲(chǔ)空間計(jì)算:但一繼承的空類空間是1Byte,多重繼承的空類空間是1Byte浪谴,但是虛繼承設(shè)計(jì)虛表(虛指針)扶檐,所以是8Byte。
- 綜上所述:每個(gè)對(duì)象索占用的存儲(chǔ)空間只是該對(duì)象的非靜態(tài)數(shù)據(jù)成員總和攘须,其他都不占用存儲(chǔ)空間,包括成員函數(shù)和靜態(tài)數(shù)據(jù)成員。
- this 指針
保證不同對(duì)象的成員函數(shù)引用的數(shù)據(jù)成員屬于該對(duì)象。隱式使用糖埋。 - 類模板
#include <iostream>
using namespace std;
// template <class T>
class Operation
{
public:
Operation(T a, T b): x(a), y(b){}
T add()
{
return x+y;
}
T subtract()
{
return x - y;
}
private:
T x, y;
}
int main
{
Operation <int> oper_int(1, 2);
cout << oper_int.add() << " " << oper_int.subtract() << endl;
Operation <double> oper_double(3.5, 1.2);
cout << oper_double.add() << " " << oper_double.subtract() << endl;
return 0;
}
- 構(gòu)造函數(shù)和析構(gòu)函數(shù)執(zhí)行順序
- 再一般情況下兆解,調(diào)用析構(gòu)函數(shù)的次序正好與調(diào)用構(gòu)造函數(shù)的次序相反:最先被調(diào)用的構(gòu)造函數(shù),其對(duì)應(yīng)的(同一對(duì)象中的)析構(gòu)函數(shù)最后被調(diào)用;而最后被調(diào)用的構(gòu)造函數(shù)侥猬,其對(duì)應(yīng)的析構(gòu)函數(shù)最先被調(diào)用(棧)瞧预。??先構(gòu)造的后析構(gòu),后構(gòu)造的先析構(gòu)松蒜。
2.2 繼承和派生
- 繼承和派生的一般形式
??默認(rèn)
class 派生類名 : [public | private | protected] 基類名
{
派生類新增加的成員;
};
- 從上面派生類定義的一般形式可以看出:派生類里有兩大部分內(nèi)容:從基類繼承而來的和在聲明派生類事增加的部分。
- 派生類雖然是用來避免代碼中重復(fù)出現(xiàn)多個(gè)類中大部分內(nèi)容雷同的情況已旧,但由于派生類接受了基類的全部內(nèi)容秸苗,這樣可能出現(xiàn)有些基類的成員,在派生類中使用不到的运褪,這就會(huì)造成數(shù)據(jù)的冗余惊楼,尤其是多次派生后玖瘸,會(huì)在許多派生類對(duì)象中存在大量無用的數(shù)據(jù),不僅浪費(fèi)大量的空間檀咙,而且在對(duì)象的簡(jiǎn)歷雅倒、復(fù)制、賦值和參數(shù)的傳遞中弧可,花費(fèi)許多無謂的時(shí)間蔑匣,從而降低效率。慎重選擇棕诵。
- 派生類的訪問屬性
- 無論哪種繼承方式裁良,在派生類是不能訪問基類的私有成員的,私有成員只能被本類的成員函數(shù)所訪問校套,畢竟派生類與基類不是同一個(gè)類价脾。為了避免在多級(jí)派生之后程序猿記不清哪些成員可以訪問,哪些成員不能訪問笛匙,所以在實(shí)際中侨把,常用的是共用繼承。
- 派生類的構(gòu)造函數(shù)與析構(gòu)函數(shù)(看不懂??)
- 派生類的構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序
- 總的來說妹孙,構(gòu)造函數(shù)的調(diào)用順序是:1??如果存在基類秋柄,那么先調(diào)用基類的構(gòu)造函數(shù),如果基類的構(gòu)造函數(shù)中仍然存在基類涕蜂,那么程序會(huì)繼續(xù)進(jìn)行向上查找是华匾,知道找到它最早的基類進(jìn)行初始化;2??如果所調(diào)用的類中定義的時(shí)候存在對(duì)象被聲明机隙,那么在基類的構(gòu)造函數(shù)調(diào)用完成以后蜘拉,再調(diào)用對(duì)象的構(gòu)造函數(shù);3??調(diào)用派生類的構(gòu)造函數(shù)有鹿。
2.3 類的多態(tài)
- 多態(tài)的概念
在C++程序設(shè)計(jì)中旭旭,多態(tài)性是指具有不同功能的函數(shù)可以用同一個(gè)函數(shù)名,這樣就可以用一個(gè)函數(shù)名調(diào)用不同內(nèi)容的函數(shù)葱跋。在面向?qū)ο蠓椒ㄖ幸话氵@樣表述多態(tài)性的:向不同的對(duì)象發(fā)送同一個(gè)消息持寄,不同的對(duì)象在接收時(shí)會(huì)產(chǎn)生不同的行為(即方法);也就是說娱俺,每個(gè)對(duì)象可以用自己的方式去響應(yīng)共同的消息稍味。所謂消息就是調(diào)用函數(shù),不同的行為就是指不同的實(shí)現(xiàn)荠卷,即執(zhí)行不同的函數(shù)模庐。(與函數(shù)重載的區(qū)別)
- 函數(shù)重載雖然函數(shù)名一樣,但函數(shù)類型油宜、形參個(gè)數(shù)或類型不同掂碱;多態(tài)是指基類和派生類中成員函數(shù)名相同怜姿、類型相同、形參完全相同疼燥,但是兩個(gè)同名函數(shù)不在同一個(gè)類中沧卢,而是分別在基類和派生類中,屬于同名覆蓋醉者。
#include <iostream>
#include <string>
using namespace std;
/* 聲明基類Box */
class Box
{
public:
// 聲明構(gòu)造函數(shù)
Box(int h, int w, int l);
// 聲明輸出函數(shù)
virtual void display();
protected:
int height, width, length;
}
Box::Box(int h, int w, int l)
{
length = l;
width = w;
height = h;
}
void Box::display()
{
cout << "length: " << length << endl;
cout << "width: " << width << endl;
cout << "height: " << height << endl;
}
class FilledBox : public Box
{
public:
FilledBox(int, int, int, int, string);
virtual void display();
private:
int weight;
string fruit;
}
FilledBox::FilledBox(int h, int w, int l, int we, string f) : Box(h,w,l), weight(we), fruit(f){}
void FilledBox::display()
{
cout << "length: " << length << endl;
cout << "width: " << width << endl;
cout << "height: " << height << endl;
cout << "weight: " << weight << endl;
cout << "fruit: " << fruit << endl;
}
int main(int argc, char const *argv[])
{
char* str = "hello world!";
char* str1 = "abc";
str = str1;
// printf("%s\n", str);
Box box(1,2,3);
FilledBox fbox(2,3,4,5,"apple");
Box *pt = &box;
pt->display();
pt = &fbox;
pt->display();
return 0;
}
- 虛函數(shù)的使用
- 使用虛函數(shù)時(shí)需要注意兩點(diǎn):
1??只能用virtual關(guān)鍵字聲明類的成員函數(shù)但狭,使它成為虛函數(shù),而不能將類外的普通函數(shù)聲明為虛函數(shù)湃交。因?yàn)樘摵瘮?shù)的作用是允許在派生類中對(duì)基類的虛函數(shù)重新定義熟空。顯然,它只能用于類的繼承層次結(jié)構(gòu)中搞莺。
2??一個(gè)成員函數(shù)被聲明為虛函數(shù)后息罗,在同一類族中的類就不能再定義一個(gè)非virtual的但與該虛函數(shù)具有相同參數(shù)(包括個(gè)數(shù)和類型)和函數(shù)返回值類型的同名函數(shù)*了。 - 根據(jù)什么考慮是否把一個(gè)成員函數(shù)聲明為虛函數(shù)才沧?
- 純虛函數(shù)
virtual void func() = 0;
- 動(dòng)物基類可以派生出老虎迈喉,孔雀等,但用動(dòng)物本身生成對(duì)象沒有什么意義温圆。
- 在基類中將函數(shù)定義為純虛函數(shù)挨摸,則編譯器要求在派生類中必須予以覆蓋以實(shí)現(xiàn)多態(tài)性。
- 如果類中含有純虛函數(shù)岁歉,這個(gè)類不能生成對(duì)象得运。
- 析構(gòu)函數(shù)
- 單例模式
2.4 本章小結(jié)
- 繼承從一定程度上破壞了封裝,因?yàn)樽宇惱^承父類锅移,修改父類導(dǎo)致所有子類的改變熔掺,因此繼承一定程度上又破壞了系統(tǒng)的可擴(kuò)展性,所以繼承需要慎用非剃。
- 多態(tài):接口的多種不同的實(shí)現(xiàn)方式即為多態(tài)置逻。接口是對(duì)行為的抽象。封裝是找到對(duì)象的變化并封裝起來备绽,但是封裝之后怎么適應(yīng)接下來的變化呢券坞?這就是接口的作用,接口的主要目的是為不相關(guān)的類提供通用的處理服務(wù)肺素,從而實(shí)現(xiàn)系統(tǒng)的可維護(hù)性恨锚、可擴(kuò)展性。
- 綜上:面向?qū)ο髮?shí)現(xiàn)了人們追求的系統(tǒng)的可維護(hù)性倍靡、可擴(kuò)展性眠冈、可重用性。
6、TCP協(xié)議
關(guān)于這部分蜗顽,因?yàn)樽髡呤蔷W(wǎng)絡(luò)研究方向,且網(wǎng)絡(luò)知識(shí)相當(dāng)零碎雨让,所以不再此處做筆記雇盖。改為紙質(zhì)筆記。謝謝栖忠!
后記:我一直覺得想要學(xué)習(xí)一門語言(無論是編程語言還是溝通語言)崔挖,最重要的就是用起來,沒有什么比這個(gè)更快了庵寞。