C++进阶知识一
Posted 同学笑了么
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++进阶知识一相关的知识,希望对你有一定的参考价值。
1.C语言也可以面向对象面层,使用“函数指针结构体”为C语言找个“对象”,就是在结构体中定义函数指针。
2.GUID:global unique identifier,全局唯一标识符。用于在系统中唯一标识一个对象。
3.com是一个平台无关,分布式,面向对象的程序接口标准,一般用于扩展应用程序的功能,大多数微软公司开发的应用程序都支持com接口扩展,com程序一般是dll 文件,com程序被提供给主调程序调用,com 程序为主调程序提供固定的接口,主调程序先通过固定的函数接口来获取其他的接口。
4.GDI是Graphics device Interface (图形设备接口)的简称,当windows应用程序需要显示点。线。图像,文字等内容,在显示器或打印输入这些内容时,就需要使用到GDI。应用程序当然不能直接操作系统的硬件,比如显
卡,GDI 就为应用程序提供了相关的接口。
5.DC(设备上下文,Device Contexts)是 GDI 程序设计中最基本也是最重要的概念。DC 是一种对象,设定了图形输出的特性与属性。
一个 DC 所关联的设备驱动决定了通过此 DC 进行的图形输出操作(文字输出、绘制、填
充等)会被哪个设备(包括显示器、打印机、绘图仪)或设备的子区域(窗口客户端等)所
接收。DC 也可以只是设备全部输出范围的一部分。比如界面上某个窗口的客户区也可以有 DC
与之对应,对这样的 DC 进行操作只会影响到窗口客户区。
6.一个DC中还包括了一系列的图形对象,所谓图形对象会影响到对DC的输出操作的结果。
当一个应用程序创建一个 DC 时,系统会为 DC 创建默认的图形对象(路径和位图除外)。
7.字体:font,front:前面。clip:裁剪。
8.如果浏览器不小心关闭或者电脑重启,可以在浏览器的足迹里面看到上次浏览的网页。
9.SetWorldTransform 实现了坐标变换的功能。
10.为什么有的库需要自己定义很多种typedef。因为考虑到移植性,有的在16位机器上,有的在32位机器上,用途typedef定义,到时候只需要修改一下typedef就可以,而不必需要整体的数据类型都需要修改,
在16位平台上一个int 占用的是2个字节,而在32位平台上一个int占用的是4个字节,数据表示的范围都是完全不一样的。
如果在16位平台上我们用int定义了所有的变量,那么到了32平台上这些用int定义的变量我们都得考量一下是否合适,这个工作量就很大了,这就不叫移植了,快叫重构了。
OK,现在问题的关键是怎么保证同一个数据类型在不同平台上占用的字节数是一样的,而且表示的数据范围也是一样的。
typedef派上用场了。
在16位平台上我们重新定义一个类型
typedef int int_16;
在16位平台上今后就不用int定义变量了,全部用int_16定义变量
把这个16位平台平台移植到32位平台上再加上这句行不行呢?
typedef int int_16;
肯定不行啊,要改一改的,16位平台上的int_16占用的字节数是2个字节,表示的数据范围是32768 ~ 32767
那么在32位平台上,什么数据类型是占用2个字节,表示的数据范围也是32768 ~ 32767呢 ?是short int 啊
所以要把typedef int int_16; 改成typedef short int int_16;
这样在32位系统中所有的被移植过来的int_16变量不需要修改就能满足要求了。
11. 头文件重复引用不是在不同的文件中引用(如果在不同的cpp文件中引用,而这两个cpp会有关联,生成同一个exe),而是“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include “a.h” 和#include "c.h"此时就会造成c.h重复引用。
头文件被重复引用引起的后果:
有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些,但是对于大工程而言编译效率低下那将是一件多么痛苦的事情。
有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。
12.#define a 或者#define a=2都是正确的,就像int a 和int a = 4;一个给变量赋值,一个没有。
13.typedef 和define的作用域
typedef:
如果放在所有函数之外,它的作用域就是从它定义开始直到文件尾;
如果放在某个函数内,定义域就是从定义开始直到该函数结尾;
#define:
不管是在某个函数内,还是在所有函数之外,作用域都是从定义开始直到整个文件结尾。
如:
typedef …//此处开始到文件结尾
#define …//此处开始到文件结尾
总结:
(1) 不管是typedef还是define,都不能在定义之前使用;
(2) typedef受函数范围影响,而define不受;
(3) 不管是typedef还是define,其作用域都不会扩展到别的文件,即使是同一个程序的不同文件,也不能互相使用。
14.使用typedef与define在定义指针类型时的区别:
#include <stdio.h>
#define P1 int* //这里分别用define和typedef两个整型指针类型;
typedef int* P2;
int main (void)
{
int a = 1, b = 2;
P1 p1, p2; //用define定义的,此时定义变量时相当于int *p1, p2;
P2 p3, p4; //用typedef定义的,此时定义变量时相当于int *p3, *p3;
p1 = &a, p2 = a; //此处若是p2 = &a的话,在编译时,编译器会提出警告。也就
//证明了p2是一个整型变量,而不是一个整型指针。
p3 = &b, p4 = &b;
printf ("This is the result of define: %d %d\n\n", p1, p2);
printf ("This is the result of typedef: %d %d\n\n", p3, p4);
return 0;
}
因为#define只做简单的类型替换。
15.extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找定义。
16.dllexport和dllimport的区别:
dllexport是在这些类、函数以 及数据的申明的时候使用。用过表明这些东西可以被外部函数使用,即(dllexport)是把DLL中的相关代码(类,函数,数据)暴露出来为其他应用程 序使用。使用了(dllexport)关键字,相当于声明了紧接在(dllexport)关键字后面的相关内容是可以为其他程序使用的。而 dllimport关键字是在外部程序需要使用DLL内相关内容时使用的关键字。当一个外部程序要使用DLL内部代码(类,函数,全局变量)时,只需要在 程序内部使用(dllimport)关键字声明需要使用的代码就可以了,即(dllimport)关键字是在外部程序需要使用DLL内部相关内容的时候才 使用。(dllimport)作用是把DLL中的相关代码插入到应用程序中。
_declspec(dllexport)与_declspec(dllimport)是相互呼应,只有在DLL内部用dllexport作了声明,才能 在外部函数中用dllimport导入相关代码。实际上,在应用程序访问DLL时,实际上就是应用程序中的导入函数与DLL文件中的导出函数进行链接。而 且链接的方式有两种:隐式迎接和显式链接。
显式链接刚同应用程序用语句显式地加载DLL,编译器不需要知道任何关DLL的信息。
16.Windows系统已经为大多数的常见设备编写了驱动程序。系统的正常运行离不开驱动程序。
17.windows系统是用C语言开发的。windows应用程序api也大多为c形式,但是windows系统本身是很好的面向对象思想的体现。
18.x86就是我们一般用的32位的系统,x64就是64位的系统。
区别:
第一,设计初衷不同,64位操作系统的设计初衷是:满足机械设计和分析,三维动画, 视频编辑和创作,以及科学计算和高性能计算应用程序等领域需要大量内存和浮点性能的客户需求。她们是高科技人员使用本行业特软件的运行平台,而32位操作系统是为普通用户设计的
第二,要求配置不同。64位操作系统只能安装在64位电脑上(cpu必须是64位的)。同时需要安装64位常用软件以发挥64位的最佳性能。
第二,要求配置不同。64位操作系统只能安装在64位电脑上(CPU必须是64位的)。同时需要安装64位常用软件以发挥64位(x64)的最佳性能。32位操作系统则可以安装在32位(32位CPU)或64位(64位CPU)电脑上。当然,32位操作系统安装在64位电脑上,其硬件恰似“大马拉小车”:64位效能就会大打折扣。
第三,软件普及不同。目前,64位常用软件比32位常用软件,要少得多的多。道理很简单:使用64位操作系统的用户相对较少。因此,软件开发商必须考虑“投入产出比”,将有限资金投入到更多使用群体的软件之中。这也是为什么64位软件价格相对昂贵的重要原因(将成本摊入较少的发售之中)。
64位电脑虽然可以安装32位操作系统,但是32位电脑绝对不能安装64位操作系统。这点至关重要务必牢记,以避免盲目下载和安装。
19.如何看自己电脑能不能装64位操作系统呢,只要是双核或者双核以上,就可,单击我的电脑-》属性-》设备管理器-》处理器。如果处理器有两个或者两个以上,就可以。
以上是关于C++进阶知识一的主要内容,如果未能解决你的问题,请参考以下文章
熬夜爆肝!C++核心进阶知识点汇总整理万字干货预警 建议收藏