《VC++深入講解》第一章第二章讀書筆記

《VC++深入講解》 孫鑫 電子工業(yè)出版社。書的第一版是2007年的,我看的是2013年的修訂版。書中介紹的MFC架構(gòu),現(xiàn)在被廣泛認為已經(jīng)過時了,但前幾章對一些概念為何引入講得比較透徹,是一本不錯的有點基礎(chǔ)的菜鳥的入門書籍。


《VC++深入講解》.png

第一章

  1. 名詞解釋:
    【SDK】Software Development Kit,軟件開發(fā)包
    【句柄】在Windows程序中有各種資源(窗口、圖標、光標等),系統(tǒng)在創(chuàng)建這些資源時會為它們分配內(nèi)存,并返回標識這些資源的標識號,即句柄(Handle)。
    (HWND)窗口句柄
    (HCURSOR)光標句柄
    (HBRUSH)畫刷句柄

  2. 消息隊列:
    每個Windows程序?qū)?yīng)一個消息隊列,由Windows系統(tǒng)創(chuàng)建。系統(tǒng)會將鼠標動作、鍵盤動作等消息放到對應(yīng)窗口的消息隊列中,而應(yīng)用程序通過不斷循環(huán),從消息隊列中取出消息,進行相應(yīng)。
    Windows消息分“進隊消息”和“不進隊消息”,不進隊消息在系統(tǒng)調(diào)用串口的過程中直接發(fā)送給窗口。

  3. 代碼部分:
    用VS會因為不兼容報錯,則,右鍵項目——>屬性——>配置屬性——>常規(guī)——>字符集:使用多字節(jié)字符集。

第二章

  1. this指針:
    this指針指向?qū)ο蟊旧恚韺ο蟊旧淼牡刂?。例子?/li>
class expamle
{
public: 
    int x ; 
    int y ;
    example()       // 構(gòu)造函數(shù)
    {
        x = 0;
        y = 0;
    }  
    example( int x, int y)        // 構(gòu)造函數(shù)的重載
    {
        this->x = x;            // 等式左邊的x是類里面對象的那個x,右邊的是形參
        this->y = y;            // 等式左邊的y是類里面對象的那個y,右邊的是形參
    }  
    ~example()              // 析構(gòu)函數(shù)
    {
    }
};
  1. 繼承:
    構(gòu)造子類的對象的時候,會先構(gòu)造父類的對象,因此,要求構(gòu)造函數(shù)的調(diào)用相一致。當(dāng)子類中不含參數(shù),而父類中含參數(shù)時,傳遞參數(shù)的例子:
class fish : public animal
{
public: 
    fish() : animal(300,400)
    {
        // 函數(shù)體
    }
};
  1. 多重繼承
class B: pubic A1, public A2
{
    // s……
}
  1. 虛函數(shù)
    子類與父類中如果有函數(shù)重名,則調(diào)用父類函數(shù),因為子類與父類的結(jié)構(gòu)是:


    父與子.png

    但如果父類中的是虛函數(shù),則調(diào)用子類的。
    用一句話概括就是;在基類函數(shù)的前面加上virtual關(guān)鍵字,在派生類中重寫該函數(shù),運行時將會根據(jù)對象的實際類型調(diào)用相應(yīng)的函數(shù)。如果對象類型是派生類就調(diào)用派生類的函數(shù),如果對象類型是基類,就調(diào)用基類的函數(shù)。

  2. 純虛函數(shù)
    例子:
class animal
{
public:
    virtual void breath() = 0; 
}
  1. 函數(shù)的覆蓋、隱藏和重載的區(qū)別:
    【重載】發(fā)生在同一類中,函數(shù)名相同,參數(shù)不同;
    【覆蓋】基類函數(shù)為虛函數(shù),發(fā)生覆蓋的兩個函數(shù)分別位于派生類和基類中,函數(shù)名稱和參數(shù)列表必須相同;
    【隱藏】發(fā)生在派生類和基類之間,不屬于覆蓋的情況。

7.引用:
例子:

// 執(zhí)行完后,a和b的值都變成c
// 相當(dāng)于b是a的小名
int a = 5;
int &b = a;
int c = 3;
b = c;
// 更普遍的用法,提高代碼可讀性。
#include <stdio.h>
void change(int& a, int& b)    // 交換a和b的取值,有趣的算法。
{
    a = a + b;
    b = a - b;
    a = a - b;
}

void main()
{
    int x = 5;
    int y = 6;
   change(x, y);
    cout << “x = ” << x << endl;
    cout << “y = ” << y << endl;
}

其他

  1. 變量命名規(guī)則(微軟公司創(chuàng)建的windous命名約定,匈牙利表示法):


    匈牙利變量命名規(guī)則.png
  2. VC++ 的設(shè)計習(xí)慣與程序編譯鏈接的原理與過程
    在頭文件中包含類定義以及類成員函數(shù)的聲明;
    在源文件中包含類成員函數(shù)的實現(xiàn)。
    解決重復(fù)包含都文件的方法:
// 在頭文件開頭加上這句話:
#ifndef ANIMAL_H_H
#define ANIMAL_H_H
class animal
{
    ……
}

程序編譯鏈接的原理與過程:


VC++ 程序編譯鏈接的原理與過程.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容