C++基础知识

一、c++运算符和函数功能
1:reinterpret_cast强制类型转换符.

2:UpdateData是MFC的窗口函数,用来刷新数据。操作系统会调用这个函数初始化对话框中的数据,或者检索或者验证对话框中的数据。UpdateData(TRUE):将控件的值赋值给变量。UpdateData(FALSE):将变量的值赋值给控件。

3:EnableWindow(TRUE):窗口允许接收用户的输入。EnableWindow(FALSE):屏蔽窗口对用户输入的相应。

4:DDX_TEXT()把变量和控件文本绑定、DDX_Control();把变量和控件本身绑定。

5:GetDlgItem()返回窗口中指定参数ID的子元素的句柄,可以通过返回的句柄对窗口内的子元素进行操作。

6:GetCurSel()返回组合框中列表框的当前选中项
7:assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行
8:A ## B 连接AB并去掉前后空格
9:_fcloseall(void);关闭所有打开的文件流。
10:在动态链接库中_declspec(dllexport)管导出,_declspec(dllimport)管导入
11:AfxMessageBox() 调用模态对话框输出对应的参数。
12:GetMessage():从队列中读取消息
13:TranslateAccelerator():翻译快捷键消息
14:TranslateMessage();将TranslateAccelerator翻译的快捷键消息转换成字符消息。
15:DispatchMessage();函数将消息发送给响应的窗口
16:CALLBACK修饰符用于指定函数使用标准函数调用转换
17:DefwindowProc():将消息传递给窗口
18:LOWORD():获取32位数据的低16位,HIWORD()获取32位数据的高16位
19:AfxAbort: MFC提供的默认终止函数
20:AfxBeginThread:创建新线程
21:AfxCheckError: 检测代码是否为错误代码
22:AfxCheckMemory 检测是否发生有关内存的错误
23:AfxDaoInit 初始化DAO数据库引擎
24:AfxDaoterm 终止DAO数据库引擎
25:AfxDbInitModule 初始化MFC数据库DLL
26:AfxDoForAllClasses在应用程序内存空间中,枚举所有序列化派生类
27:AfxDump 在调试程序时,列出对象的所有状态
28:AfxDumpStack 列出当前堆栈的情况
29:AfxEnableControlContainer:支持对OLE控件支持

30:ReadFile():从文件指针指向的位置开始将数据将出到一个文件中,且支持同步或者异步操作

31:SetFilePointer(文件句柄,偏移字节数低32位,偏移字节数高32位,起始位置):设置文件指针(设置当前的读写位置)

32:AfxBeginThread():创建用户界面线程、工作者线程

33:GetFileSize(文件句柄,文件大小大高32位(若不需要刻意为空))。

34:SetPos()设置进度条
35:DoModal() 调用窗口
36:AfxMessageBox()调用模式对话框

37:ASSERT(int a)作用:当a为假时先向stderr打印一条错误信息,然后调用Abort函数终止程序的运行。

38:CString::Find(A) 查找第一次出现A的地方,并且返回第一个字符到A的长度
39:CString::Mid(intnFirst,intnCount)const; //从左边第 nFirst+1 个字符开始,获取后面nCount个字符  。

40:reinterpret_cast是强制类型转换符;
41:Enablewindow():开启或者关闭窗口对输入的响应。TRUE表示开启,FALSE表示关闭。
42:DDX_Rext():函数管理着对话框、表格视或控件视对象中的编辑控件与对话框、表格视或控件视对象的CString型数据成员之间的int,UINT,long,DWORD,CString,float或者double型数据交换。

43:GetDlgItem()获取窗口内指定ID的句柄、GetDlgItemInt获取指定控件的内容并转化为10进制整数。GetDlgItemText获取指定控件的文本信息或者标题

44:getCurSel()多个作用。总体来说是获取当前选中项。
45:_fcloseall(void);关闭所有打开的文件流。
46: 在动态链接库中_declspec(dllexport)管导出,_declspec(dllimport)管导入
47:DoDataExchange()其作用是与对应的变量交换对话框数据。这种交换机制中,DoDataExchange()并不是被自动调用的,而是需要在程序中调用CDialog::UPdatedata()函数再去自动调用Dodataexchange()的。

48:CEdit::SetLimitText(int a);设置EDitcontrol控件的最大输入字符
50:Tostring()数字转换成字符串
51:fseek()重定位流上的指针
二、其他基础知识
在这里推荐一个学习MFC的步骤,可以参考《Windows程序设计》->孙鑫的《MFC深入详解》->侯捷的《深入浅出MFC》->《Win32多线程编程》->《windows核心编程》->《数据结构》->《Effective C++》这些书。其中,可以好好看看孙鑫的视频讲解,这样学习进步肯定比较快的。




1:位域 格式 数据成员声明:占用的位数
2:在变量名前边加::可以告诉编译器使用全局变量而不使用本地变量
3:空类对象大小为1字节

4:派生类的构造函数的执行顺序:先执行基类的构造函数,再执行派生类的构造函数。析构函数的执行顺序和构造函数相反
5:HWND:窗口句柄类型(在32位操作系统中为一个32位无符号整型)
6:windows操作系统通过Windows API为开发人员提供了访问操作系统底层功能的支持
7:序列化:将对象的状态信息转化为可以存储或者传输的形式的过程
8:同步:是一件一件的做,等一件事做完后再做下一件。异步与之相反

9:冒号(:)的用法
1)表示位域。
2)构造函数后边的冒号紧跟着初始化列表,各个初始化变量之间以逗号隔开。
3)public,private, pratected后边的冒号。
4)类名后边的冒号用于定义类的继承关系。
5)条件语句(?:)
6)语句标签。和goto配合使用。
7)switch语句中的case后边的冒号。

10:双冒号(::)的用法
1)表示域操作符,例如在类外边实现成员函数,使用命名空间中的变量等。
2)直接用在全局函数之前表示调用全局函数。
3)表示引用成员函数及变量,作用域成员运算符。例如System::Math::sqrt()相当于System.Math.sqrt()。

11:主键:关系型数据库中的一条记录中有若干属性,若其中某一个属性组(注意是属性组)能够唯一标识一条记录,该属性组就可以是一个主键

12:调用别的类中的成员的方法 1:类名::成员名。2:类的实例.成员名。 3:类的指针-> 成员名。

13:<< 插入运算符。 cout输出流对象。cin标准输入流。
14:c++标准库中的类和函数都是在命名空间中声明的,因此程序中需要用到c++标准库就必须使用“using namespace std”做声明

15:system(“pause”);system()在程序中调用系统命令和shell命令,pause使程序暂停。
16:endl换行(end line的缩写表示本行结束)
17:c++中把一组数据(数据成员)和有权调用这些数据的函数(成员函数)封装在一起,组成一种称为“类”的数据结构。也就是说一个类是由一些数据以及对他们进行操作的函数组成。

18:对象是占实际存储空间的,而类不占实际存储空间
19:函数调用的过程:程序先执行函数调用之前的语句、流程的控制转移到被调用函数的入口处同时进行参数的传递、执行被调用函数中函数体的语句、流程返回调用函数的下一条语句处,将函数返回值带回、接着执行主函数中未执行的语句。

20:内联函数(调用函数时系统需要一定的时间和开销)(函数声明时之前加inline修饰)适用于函数体较小而又频繁使用的函数。在类的内部实现成员函数不用声明该函数也是内联函数。
内联函数的限制:
1)内联函数中不能有静态变量。
2)函数不能太复杂,不能有循环语句、switch语句、goto等语句。
3)函数不能递归。
4)函数中不能定义数组
出现上述情况编译器会自动忽略inline将其编译成一般函数。

21:输入字符串方式:
1)cin >> s;
2)cin.get(s,n);读取输入字符串的前n-1个字符 (最后一个是‘\0’)
3)cin.get();读取一个字符。
4)cin.getline(s,n);读取输入字符串的前n-1个字符。
22:输出字符串的方式:
1)cout << s;
2)cout.put(字符或者字符变量);这种方式只能输出单个字符所以想要输出字符串需要循环打印。
3)cout.write(字符串或者字符数组名,n);输出字符串的前n个字符。(1:输出字符不包括‘\0’。2:cout流中用字符数组名,而不是数组元素名。3:遇到第一个'\0'结束。)

23:函数重载的条件:函数名相同,函数的返回值类型可以不同,但是函数的形参的个数,类型,顺序应有不同。(不管返回值)。
重载说明:1)c++允许在函数说明或者函数定义中为一个或者多个参数指定默认值,这样形参就不必从实参处取值。
2)如果一个函数有多个参数,则具有默认值的参数必须排在没有默认值的参数的右侧。
3)如果一个文件中既有函数声明又有函数定义,则只能在函数声明指定参数的默认值
4)函数的原型既可以说明多次,也可以在各个函数原型中设置不同的参数具有默认值,但是要注意的是,在一个文件中,函数的同一参数只能在一次声明中指定默认值。
5)重载函数有默认参数时,可能导致二义性。

24:函数模板与模板函数(减少重复代码)
1)形式:template <clasee T>(使用时编译器会根据实参的类型自动确定模板函数的数据类型)
2)模板函数的类型参数不止一个,可以根据需要确定个数。
3)模板函数值适用于函数体相同、函数的参数个数相同而类型不同的情况。如果参数的个数不同则不能用函数模板。

25:malloc和mew的比较:
1:mew自动计算要分配类型的大小
2:自动返回正确的指针类型,不用进行强制指针类型转换。
3:可以用new对分配的对象进行初始化。
new运算符的用法:
指针 = new 数据类型名;
指针 = new 数据类型名(初始化);
26:定义动态数组
指针 = new 数组类型名[数组长度];(数组长度是一个整型值既可以是常量,也可以是变量)
delete运算符的用法(释放动态申请的内存)
格式:delete 指针变量名;
delete []指针变量名;

27:new和delete的使用规则
1)delete只能释放new申请的内存空间并且new申请的内存空间只能被释放一次
2)new释放的内存空间可以是指向NULL的指针。

28:引用
声明一个引用时,一定要对其初始化(除了引用做函数的参数或者返回值时)。
格式:引用类型&引用名 = 被引用的变量;
引用和指针的区别
1:引用被创建的时候必须被初始化,而指针则可以在任何时候被初始化
2:不能有NULL引用,而指针可以是NULL。
3:一旦引用被初始化就不能改变引用的关系,但是指针可以随时改变其指向关系。
4:不允许对void类型进行引用。
5:不能建立数组的引用。
6:引用本身不是变量,不占用内存空间。
7:指针可以有引用。
8:指针可以做数组元素,引用不可以。
c++提供引用,主要用途之一是建立函数参数的引用传递方式,通过引用传递方式不用指针也可以改变实参的值。(形参是实参的引用)
9:函数返回应用:作用使函数作为左值而被赋值。

29:命名空间指定标识符的可见范围,c++标准库中的所有标识符被定义在一个名为 std的命名空间中。

30:const成员函数:const关键字必须放在函数声明的尾部。const成员函数不会修改该类的任何成员数据的值,称为常量成员函数。const成员函数外部定义时也不能忘记后边加上const。

31:理解复杂声明可用的“右左法则”:从变量名看起,先往右,再往左,碰到一个圆括号就调转阅读的方向;括号内分析完就跳出括号,还是按先右后左的顺序,如此循环,直到整个声明分析完。

32:#define 是用前边的代替后边的 typedef是用后边的代替前边的

33:wchar_t 16位字符类型

34: __stdcall 被这个关键字修饰的函数,其参数都是从右向左通过 堆栈 传递的(__fastcall 的前面部分由ecx,edx传), 函数调用 在返回前要由被调用者清理堆栈。

35:A ## B 连接AB并去掉前后空格
36:一般下划线开头的东西是编译器和标准库内部使用的名字。下划线开头的函数一般都是专用的函数,一般用于特定系统相关。一般只有以经广泛使用的系统库函数和宏才有资格使用下划线开头(为了移植性一般不使用)

37:_intn :定长整型 n可取8、16、32、64
38:c++关键字
asm:插入一条汇编指令
auto:声明一个本地变量
bool:声明一个布尔型变量
break:结束一个循环
case:一个switch语句的一部分
catch:处理thrown产生的异常
const_cast:从一个const变量中抛出
continue:跳出本次循环
delete:释放内存
dynamic_cast:动态投射
enum:创建列举类型
explicit:仅用在构造器的正确匹配
false:
float:
friend:允许非函数成员使用私有数据
inline:定义一个函数为内联
mutable:忽略const变量
namespace:用一个定义的范围划分命名空间
new允许动态存储一个新变量
operator:创建重载函数
register:定义一个寄存器变量
reinterpret_cast:改变一个变量的类型
static_cast:执行一个非多态性cast
template:创建一个给特殊函数
throw:抛出一个异常
try:执行一个被throw抛出的异常
typeid:描述一个对象
typename:声明一个类或未定义的类型
union:
using:用来输入一个namespace
virtual:创建一个虚函数
volatile:警告编译器有关变量可能被出乎意料的修改
wchar_t:声明一个2字节的(宽字符)字符型变量

39:c++中共有5种作用域:
1)本地作用域 (类局部变量)
2)函数作用域 只有标签属于此作用域的变量。标签可以在定义它的函数内任意地方使用,函数外部不能使用
3)文件作用域
4)类作用域
5)原型作用域

40:共用体union:是一种共享内存的存储方法,它在同一内存空间中可以定义多种数据元素,而且在同一时间只能包含一种数据元素的类型。共用体的存储空间是其成员列表中占用空间最大的成员的存储空间大小。共用体不能定义虚函数,共用体不具有派生性和继承性
41:枚举类型enum:包含一组命名的常数即枚举成员。默认情况下,第一个枚举成员的值为0,每个连续的枚举成员比上一个枚举成员大一,除非显式的为枚举成员指定值。

42:位域格式 数据成员声明:占用的位数
数据成员声明部分表示在程序中访问时使用的名称,必须是整型类型。占用位数部分指定此成员在结构中占用的位数。1)在位域定义中,如果定义的位数超过了其定义的类型的长度,则系统会自动分配新的存储单元作为后面的位域存储空间而其类型与定义的类型相同。2)在vc++中位域内存的分配是从低字节到高字节的。3)如果忽略位字段的名称,则会填充数据剩下的位数,其后定义的成员会从新的存储空间开始分配。4)在位域上进行操作时,不能操作位域的地址,也不能初始化位域的引用。
43:在变量名前边加::可以告诉编译器使用全局变量而不使用本地变量
44:空类对象大小为1字节
45:1)友元类不是双向的。2)友元类不具有继承性。3)友元类不具有传递性
46:派生类的构造函数的执行顺序:先执行基类的构造函数,再执行派生类的构造函数。析构函数的执行顺序和构造函数相反
47:面向对象程序设计思想的核心是将编程过程中操作的数据作为对象处理

48: 如果以一个“基类的指针”指向“派生类的对象”,那么经由该指针只能调用基类所定义的函数。

49: 如果以一个“派生类的指针”指向一个“基类的对象”,则必须先做明显的转型操作。这种做法危险最好别用。

50:如果基类和派生类都定义了“相同名称的成员函数”,则通过对象指针调用成员函数时,到底调用到哪个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定。

51:带数据类型的赋值才是初始化。

52:重载:函数名相同参数表不同。和返回值无关。
重写(覆盖):子类重写父类中的同返回类型、同名、同参数表的虚函数。
重定义:子类重定义父类的同名(1参数相同的非虚函数;2参数不同的函数)和返回值没关系

53:模板类的成员函数不能是虚函数。(析构函数除外)

54:父类声明子类定义调用时调用的时子类的函数

55:在Char * 型转CString型时由于char *型是ASK2编码而CString是unicode编码,所以在转换时不能使用format(_T("%s")),应该把小写s换成大写S不然会出现乱码。

56:纯虚函数必须在派生类中实现。
57:字符串和Byte*型内存(或者数组)可以通过memcpy直接拷贝。只是显示的形式不一样。如字符串中单个字符使用%d显示则和byte显示的一样。所以也可以强转。
注:当byte型数据大于0x7F时强转后将显示乱码

58:MFC中一般使用红DIM(X)代替sizeof

59:初始化列表的特性:
1)初始化列表优先于构造函数执行
2)初始化列表只能用于构造函数
3)初始化列表可以同时初始化多个数据成员。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxz520zmg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值