《VC++深入讲解》第一章第二章读书笔记

《VC++深入讲解》 孙鑫 电子工业出版社。书的第一版是2007年的,我看的是2013年的修订版。书中介绍的MFC架构,现在被广泛认为已经过时了,但前几章对一些概念为何引入讲得比较透彻,是一本不错的有点基础的菜鸟的入门书籍。


《VC++深入讲解》第一章第二章读书笔记
《VC++深入讲解》.png

第一章

  1. 名词解释:
    【SDK】Software Development Kit,软件开发包
    【句柄】在Windows程序中有各种资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄(Handle)。
    (HWND)窗口句柄
    (HCURSOR)光标句柄
    (HBRUSH)画刷句柄

  2. 消息队列:
    每个Windows程序对应一个消息队列,由Windows系统创建。系统会将鼠标动作、键盘动作等消息放到对应窗口的消息队列中,而应用程序通过不断循环,从消息队列中取出消息,进行相应。
    Windows消息分“进队消息”和“不进队消息”,不进队消息在系统调用串口的过程中直接发送给窗口。

  3. 代码部分:
    用VS会因为不兼容报错,则,右键项目——>属性——>配置属性——>常规——>字符集:使用多字节字符集。

第二章

  1. this指针:
    this指针指向对象本身,代表对象本身的地址。例子:
class expamle
{
public: 
    int x ; 
    int y ;
    example()       // 构造函数
    {
        x = 0;
        y = 0;
    }  
    example( int x, int y)        // 构造函数的重载
    {
        this->x = x;            // 等式左边的x是类里面对象的那个x,右边的是形参
        this->y = y;            // 等式左边的y是类里面对象的那个y,右边的是形参
    }  
    ~example()              // 析构函数
    {
    }
};
  1. 继承:
    构造子类的对象的时候,会先构造父类的对象,因此,要求构造函数的调用相一致。当子类中不含参数,而父类中含参数时,传递参数的例子:
class fish : public animal
{
public: 
    fish() : animal(300,400)
    {
        // 函数体
    }
};
  1. 多重继承
class B: pubic A1, public A2
{
    // s……
}
  1. 虚函数
    子类与父类中如果有函数重名,则调用父类函数,因为子类与父类的结构是:


    《VC++深入讲解》第一章第二章读书笔记
    父与子.png

    但如果父类中的是虚函数,则调用子类的。
    用一句话概括就是;在基类函数的前面加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型调用相应的函数。如果对象类型是派生类就调用派生类的函数,如果对象类型是基类,就调用基类的函数。

  2. 纯虚函数
    例子:
class animal
{
public:
    virtual void breath() = 0; 
}
  1. 函数的覆盖、隐藏和重载的区别:
    【重载】发生在同一类中,函数名相同,参数不同;
    【覆盖】基类函数为虚函数,发生覆盖的两个函数分别位于派生类和基类中,函数名称和参数列表必须相同;
    【隐藏】发生在派生类和基类之间,不属于覆盖的情况。

7.引用:
例子:

// 执行完后,a和b的值都变成c
// 相当于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. 变量命名规则(微软公司创建的windous命名约定,匈牙利表示法):


    《VC++深入讲解》第一章第二章读书笔记
    匈牙利变量命名规则.png
  2. VC++ 的设计习惯与程序编译链接的原理与过程
    在头文件中包含类定义以及类成员函数的声明;
    在源文件中包含类成员函数的实现。
    解决重复包含都文件的方法:
// 在头文件开头加上这句话:
#ifndef ANIMAL_H_H
#define ANIMAL_H_H
class animal
{
    ……
}

程序编译链接的原理与过程:


《VC++深入讲解》第一章第二章读书笔记
VC++ 程序编译链接的原理与过程.png