VC++学习笔记摘录
VC++学习笔记摘录是孙鑫老师讲授的VC++课堂笔记,涵盖了VC++的基础知识和高级技术。本笔记摘录共分为两部分,第一部分介绍了VC++的基础知识,如MFC生成的C++源文件、StdAfx.h文件、afxwin.h文件等;第二部分介绍了VC++的高级技术,如函数指针、变量的生命周期、SDK示范程序、sprintf格式化字符等。
一、VC++基础知识
1. MFC生成的C++源文件中都有StdAfx.h文件,该文件包含了常用的AFX函数的声明,其中有afxwin.h文件,该文件包含了CRECT、CPoint、CWnd等许多类及其方法的声明。
2. 在Project->Setting->Debug中可以加入命令行参数。
3. 在SDK中要加入"windows.h"和stdio.h,因为LoadCursor、MessageBox等函数的声明在这个文件中。
4. 创建一个完整的窗口需要四个步骤:设计窗口类、注册窗口类、创建窗口、显示窗口。
二、VC++高级技术
1. 函数名可以代表函数代码的首地址,即可作为函数指针。
2. 变量的生命周期:可以认为出了包含它的大括号,这个变量的生命周期结束。
3. atof将字符串转化为float,atoi将字符串转化为int型。
4. 所有从CWnd类派生的类都有m_hWnd句柄。
5. GetDC()与ReleaseDC()要成对使用否则会内存泄漏。同样,BeginPaint()与EndPaint()。
6. GetStockObject()得到画笔、画刷、字体、调色板的句柄,使用时必须用类型转换。
7. 什么时候用NULL,什么时候用0?对指针赋值时用NULL,对变量赋值时用0。
8. 什么是野指针?答:将指针指向的变量的内存释放后,此指针即变成野指针!
三、VC++高级技术
1. 定义结构体和类时别忘记在最后加入";"号!
2. #include <xxx.h>与#include "xxx.h"的区别:< >不查找运行时目录,""查找运行时目录!
3. 类的定义中,如果未指明成员类型,则缺省为private。而结构体中则缺省为public。
4. 引用经常用在函数的传参上另外数值交换函数也经常用引用。
5. 通常将类的定义放.h文件,而将其实现放在cpp文件中,别忘记了在cpp文件中#include "xxx.h"
6. 如何防止类的重复定义?用#inndef Point_H_H#define Point_H_H class Point{};#endif来防止
7. 源文件cpp文件单独编译成obj文件。最后由链接器将与将要使用到的C++标准库类链接成exe文件,头文件不参加编译。
8. 函数的覆盖,在子类中重写父类的函数,此时采用早期绑定的方法。如果加入了virtual,则将采用迟绑定的技术,在运行时根据对象的类型确定调用哪一个函数。
9. 强制类型转换。如果CFish从CAnimal派生而来,则可以将鱼的对象转换为CAnimal的对象,而反之则不行。