《VC++深入讲解》 孙鑫 电子工业出版社。书的第一版是2007年的,我看的是2013年的修订版。书中介绍的MFC架构,现在被广泛认为已经过时了,但前几章对一些概念为何引入讲得比较透彻,是一本不错的有点基础的菜鸟的入门书籍。
《VC++深入讲解》.png
第一章
-
名词解释:
【SDK】Software Development Kit,软件开发包
【句柄】在Windows程序中有各种资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄(Handle)。
(HWND)窗口句柄
(HCURSOR)光标句柄
(HBRUSH)画刷句柄 -
消息队列:
每个Windows程序对应一个消息队列,由Windows系统创建。系统会将鼠标动作、键盘动作等消息放到对应窗口的消息队列中,而应用程序通过不断循环,从消息队列中取出消息,进行相应。
Windows消息分“进队消息”和“不进队消息”,不进队消息在系统调用串口的过程中直接发送给窗口。 -
代码部分:
用VS会因为不兼容报错,则,右键项目——>属性——>配置属性——>常规——>字符集:使用多字节字符集。
第二章
- 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() // 析构函数
{
}
};
- 继承:
构造子类的对象的时候,会先构造父类的对象,因此,要求构造函数的调用相一致。当子类中不含参数,而父类中含参数时,传递参数的例子:
class fish : public animal
{
public:
fish() : animal(300,400)
{
// 函数体
}
};
- 多重继承
class B: pubic A1, public A2
{
// s……
}
-
虚函数
子类与父类中如果有函数重名,则调用父类函数,因为子类与父类的结构是:
父与子.png
但如果父类中的是虚函数,则调用子类的。
用一句话概括就是;在基类函数的前面加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型调用相应的函数。如果对象类型是派生类就调用派生类的函数,如果对象类型是基类,就调用基类的函数。 - 纯虚函数
例子:
class animal
{
public:
virtual void breath() = 0;
}
- 函数的覆盖、隐藏和重载的区别:
【重载】发生在同一类中,函数名相同,参数不同;
【覆盖】基类函数为虚函数,发生覆盖的两个函数分别位于派生类和基类中,函数名称和参数列表必须相同;
【隐藏】发生在派生类和基类之间,不属于覆盖的情况。
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;
}
其他
-
变量命名规则(微软公司创建的windous命名约定,匈牙利表示法):
匈牙利变量命名规则.png - VC++ 的设计习惯与程序编译链接的原理与过程
在头文件中包含类定义以及类成员函数的声明;
在源文件中包含类成员函数的实现。
解决重复包含都文件的方法:
// 在头文件开头加上这句话:
#ifndef ANIMAL_H_H
#define ANIMAL_H_H
class animal
{
……
}
程序编译链接的原理与过程:
VC++ 程序编译链接的原理与过程.png
网友评论