《后臺(tái)開發(fā)-核心技術(shù)與應(yīng)用實(shí)踐》

作者按:我一般都是野路子學(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ù)
  1. 函數(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)存單元俱诸。
  1. 函數(shù)重載
  • C++允許用同一函數(shù)名定義多個(gè)函數(shù),但這些函數(shù)必須參數(shù)個(gè)數(shù)不同或參數(shù)類型不同赊舶。
  1. 函數(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ù)組

  1. 數(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 指針
  1. 指針的概念
  • 內(nèi)存單元的地址和內(nèi)存單元的內(nèi)容涩赢。
  1. 數(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í):() > [] > *
  1. 字符串與指針
    字符數(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;
}
  1. 函數(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 引用
  1. 引用的定義
  • 引用是一種變量類型懂缕,它用于為一個(gè)變量起一個(gè)別名。
  1. 引用作為參數(shù)
  • 引用一個(gè)重要的作用就是作為函數(shù)的參數(shù)王凑。
類型標(biāo)識(shí)符 &引用名 = 目標(biāo)變量名
int a = 10;
int &r = a ;
  1. 常引用
  • 引用型參數(shù)應(yīng)該在能被定義為const的情況下搪柑,盡量定義為const。
const 類型標(biāo)識(shí)符 &引用名 = 目標(biāo)變量名
1.6 結(jié)構(gòu)體索烹、公用體工碾、枚舉
1.6.1 結(jié)構(gòu)體、共同體百姓、枚舉的概念
  1. 結(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ù)處理
  • 宏定義/文件包含/條件編譯/布局控制
  1. 常用宏定義命令
// #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)。
  1. do...while(0)的妙用
  2. 條件編譯
#ifdef 標(biāo)識(shí)符
    程序段1
#else
    程序段2
#endif

#if 表達(dá)式
    程序段1
#else 
    程序段2
#endif
  1. 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ì)象
  1. 類與對(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ǔ)空間的。
  1. 成員函數(shù)
  • 成員函數(shù)中可以使用類中的任何成員瓢姻,包括私有的和公用的墩莫。
  • 成員函數(shù)可以在類外定義,也可以在類內(nèi)定義羞福。
  • 在類外定義成員函數(shù)時(shí)惕蹄,必須先在類中聲明,然后再在類外定義治专。在類外定義成員函數(shù)時(shí)卖陵,需要寫明類名::函數(shù)名
  1. 類的封裝性
  2. 構(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ù)的重載
  1. 析構(gòu)函數(shù)
  2. 靜態(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í)釋放空間。婆咸、
  1. 靜態(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;
}
  1. 對(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ù)成員。
  1. this 指針
    保證不同對(duì)象的成員函數(shù)引用的數(shù)據(jù)成員屬于該對(duì)象。隱式使用糖埋。
  2. 類模板
#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;
}
  1. 構(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 繼承和派生
  1. 繼承和派生的一般形式
                          ??默認(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í)間蔑匣,從而降低效率。慎重選擇棕诵。
  1. 派生類的訪問屬性
  • 無論哪種繼承方式裁良,在派生類是不能訪問基類的私有成員的,私有成員只能被本類的成員函數(shù)所訪問校套,畢竟派生類與基類不是同一個(gè)類价脾。為了避免在多級(jí)派生之后程序猿記不清哪些成員可以訪問,哪些成員不能訪問笛匙,所以在實(shí)際中侨把,常用的是共用繼承。
  1. 派生類的構(gòu)造函數(shù)與析構(gòu)函數(shù)(看不懂??)
  2. 派生類的構(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)
  1. 多態(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;
}
  1. 虛函數(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ù)才沧?
  1. 純虛函數(shù)
virtual void func() = 0;
  • 動(dòng)物基類可以派生出老虎迈喉,孔雀等,但用動(dòng)物本身生成對(duì)象沒有什么意義温圆。
  • 在基類中將函數(shù)定義為純虛函數(shù)挨摸,則編譯器要求在派生類中必須予以覆蓋以實(shí)現(xiàn)多態(tài)性。
  • 如果類中含有純虛函數(shù)岁歉,這個(gè)類不能生成對(duì)象得运。
  1. 析構(gòu)函數(shù)
  2. 單例模式
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è)更快了庵寞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狸相,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捐川,更是在濱河造成了極大的恐慌脓鹃,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件古沥,死亡現(xiàn)場(chǎng)離奇詭異瘸右,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)岩齿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門太颤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盹沈,你說我怎么就攤上這事龄章。” “怎么了乞封?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵做裙,是天一觀的道長。 經(jīng)常有香客問我歌亲,道長菇用,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任陷揪,我火速辦了婚禮惋鸥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悍缠。我一直安慰自己卦绣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布飞蚓。 她就那樣靜靜地躺著滤港,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溅漾,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天山叮,我揣著相機(jī)與錄音,去河邊找鬼添履。 笑死屁倔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暮胧。 我是一名探鬼主播锐借,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼往衷!你這毒婦竟也來了钞翔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤席舍,失蹤者是張志新(化名)和其女友劉穎布轿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俺亮,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驮捍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脚曾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片东且。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖本讥,靈堂內(nèi)的尸體忽然破棺而出珊泳,到底是詐尸還是另有隱情,我是刑警寧澤拷沸,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布色查,位于F島的核電站,受9級(jí)特大地震影響撞芍,放射性物質(zhì)發(fā)生泄漏秧了。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一序无、第九天 我趴在偏房一處隱蔽的房頂上張望验毡。 院中可真熱鬧,春花似錦帝嗡、人聲如沸晶通。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狮辽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喉脖,已是汗流浹背椰苟。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留动看,地道東北人尊剔。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像菱皆,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挨稿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型仇轻。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)奶甘; ...
    朱森閱讀 3,444評(píng)論 3 44
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,197評(píng)論 0 3
  • 一篷店、框架 1、Mac系統(tǒng)及常用工具臭家、進(jìn)制;C數(shù)據(jù)類型疲陕、常量變量、運(yùn)算符钉赁、表達(dá)式蹄殃、格式化輸入輸出 2、關(guān)系運(yùn)算符你踩、邏...
    師景福閱讀 689評(píng)論 0 2
  • 幾種語言的特性 匯編程序:將匯編語言源程序翻譯成目標(biāo)程序編譯程序:將高級(jí)語言源程序翻譯成目標(biāo)程序解釋程序:將高級(jí)語...
    囊螢映雪的螢閱讀 2,889評(píng)論 1 5