
C++
以互联网各大IT公司面试题目为主题,以各大IT技术为切合点,以解决各种IT问题为奇点,致力于构建程序员生态圈
ToF君
这个作者很懒,什么都没留下…
展开
-
SDL中文API
相关文件 SDL2/SDL.h 功能:初始化SDL参数: flags 系统名称,取值如下SDL_INIT_TIMER 定时器子系统 SDL_INIT_AUDIO 音频子系统 SDL_INIT_VIDEO 视频子系统 SDL_INIT_JOYSTICK 操纵杆子系统 SDL_INIT_HAPTIC 触屏反馈子系统 SDL_INIT_GAMEC...原创 2019-09-25 19:11:16 · 2294 阅读 · 0 评论 -
C++操作符重载
定义操作符重载就是把操作符(比如’+,-,*,/’这些运算符)赋于新的意义。调用方式调用类中的操作符重载函数的方法调用友元或独立的操作符重载函数的方法重载限制并不是所有的操作符都能被重载,除了. ,.* ,:: ,? : ,sizeof,typeid这几个运算符不能被重载,其他运算符都能被重载重载不能改变运算符用于内置类型时的含义,程序员不能改变运算符+用于两个int型时的含义运算符函数原创 2017-06-06 11:48:59 · 463 阅读 · 0 评论 -
解决已封装好类,调试的提示不是类或命名空间
VS问题: error C2653: “CBinary”: 不是类或命名空间名称1>—— 已启动生成: 项目: XmlParseLJT, 配置: Debug Win32 —— 1> CBinary.cpp 1>e:\ljt\新建文件夹\xmlparseljt\xmlparseljt\cbinary.cpp(4): error C2653: “CBinary”: 不是类或命名空间名称 1>e:原创 2017-06-06 10:55:19 · 7842 阅读 · 6 评论 -
多态
多态多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指原创 2017-05-08 17:52:24 · 535 阅读 · 0 评论 -
C++操作Excel说明
Workbooks wbsMyBooks; _Workbook wbMyBook; Worksheets wssMysheets; _Worksheet wssMysheet; Range range; Range iCell; LPDISPATCH lpDisp; COleVari原创 2017-05-23 16:25:39 · 1027 阅读 · 0 评论 -
C++使用VS2015导出/导入Excel的环境配置
环境Windows10 Microsoft Visual Studio 2015 Microsoft Office Excel 说明:用的公司的电脑,操作系统和软件都是正版的。新建C++工程,添加Excel类库新建自己的C++工程,在工程名上右键,选择Add—Class,选择MFC Class From TypeLib,然后添加如图的几个类: 修改头文件进入刚添加进来的几个类头文件中将#imp原创 2017-05-23 11:26:06 · 8735 阅读 · 5 评论 -
C++编码规范------命名约定
命名约定通用命名约定类型名必须混合大小写且以大写开始。变量名必须混合大小写且以小写开始。常量(含枚举值)的命名必须全部为大写,以下划线分隔单词。方法与函数的命名必须是动作性的,采用大小写混合的写法以小写开始。名字空间的命名表应该全部小写。模板类型名应该用单个大写字母表示。缩写与首写字母缩写作为名字不要全部大写。全局变量应该通过:: 操作符使用。全局变量的命名加g_前缀,类得成员变量原创 2017-04-25 11:59:17 · 594 阅读 · 0 评论 -
C++命名规则------文件
文件源代码文件文件的换行格式应该采用UNIX格式,而不采用windows格式;C++头文件应该有.h扩展。源文件一般有.cc(推荐),.C,.c++或.cpp扩展。类应该在头文件中声明,在源文件中定义,文件名与类名相匹配。所有的定义应该在源文件中。文件的内容必须保持在80列内。特殊的字符如TAB与分页必须避免,代码缩进时使用4个空格代替TAB。不完整而分几行的必须是明显的,最后一个分隔原创 2017-04-25 12:37:45 · 4058 阅读 · 0 评论 -
C++命名规则------语句
语句类型只针对一个文件的局部类型一般在相应文件内部声明。类必须按照public,protected和private的顺序分几部分。每部分必须被显式的标识。没有用到的部分应该预留。类型转换必须显式进行。不要依赖隐式的类型转换。变量变量应该在它们声明的地方初始化。变量不要有双重含义。应该尽量少使用全局变量。类的变量应该不要声明为public。同一类型的相关的变量一般在一条语句中声明。原创 2017-04-25 12:46:10 · 449 阅读 · 0 评论 -
malloc和new的区别
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc原创 2017-06-07 08:56:57 · 446 阅读 · 0 评论 -
Windows编程各方向要求
Windows高级编程讲解X86系列CPU保护模式内存管理和Windows内存管理掌握建立内存池机制的基本技能UNICODE字符集和UNICODE字符串处理掌握Windows错误处理和结构化异常处理掌握Windows平台对程序调试的支持深刻理解Windows对象句柄机制理解和运用Windows对象安全机制深入掌握Windows文件管理和高性能文件操作方式深刻原创 2017-06-30 11:35:34 · 636 阅读 · 0 评论 -
C语言文件操作函数大全
fopen(打开文件)相关函数 open,fclose表头文件 #include定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该原创 2017-07-12 17:36:44 · 563 阅读 · 0 评论 -
字符编码转换
案例一:C++里流文件读取字符串时产生的各种不确定编码问题wstring strFilePath;strFilePath = strResourcePath + _T("lang\\") + FindFileData.cFileName;ifstream OpenFile(strFilePath);if(OpenFile.fail()) continue;在流文件读取的时候,编码...原创 2019-06-25 20:17:19 · 457 阅读 · 0 评论 -
windows窗口拉伸参数WS_THICKFRAME
禁止窗口拉伸将窗口STYLE里WS_THICKFRAME置零//禁止主窗口拉伸 DWORD dwWinStyle = GetWindowLong(GetHWND(), GWL_STYLE); dwWinStyle &= ~WS_THICKFRAME; dwWinStyle |= WS_POPUP; SetWindowLong(GetHWND(), GWL_STYLE, d...原创 2019-04-24 11:02:39 · 5264 阅读 · 0 评论 -
memcpy的用法
概念:memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中。eg1:#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int main(){ char sz[] = { ...原创 2019-04-22 10:40:22 · 1415 阅读 · 0 评论 -
解决Duilib中的Combo下拉框滚动条不显示问题
1.在Default属性里面要添加滚动条的资源<Default name="VScrollBar" value="button1normalimage="file='scrollbar.png' source='0,90,16,106' mask='#FFFF00FF'" button1hotimage="file='scrollba...原创 2019-03-02 20:51:15 · 1685 阅读 · 5 评论 -
排序比较
稳定的排序:冒泡排序,选择排序,直接插入排序,归并排序不稳定的排序:希尔排序,堆排序,快速排序最原始最慢的排序:冒泡排序原创 2017-09-17 16:01:24 · 475 阅读 · 0 评论 -
内排序和外排序
内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序期间全部对象太多,不能同时存放在内存中,必须根据排序过程的要求,不断在内,外存间移动的排序。根据排序元素所在位置的不同,排序分: 内排序和外排序。内排序:在排序过程中,所有元素调到内存中进行的排序,称为内排序。内排序是排序的基础。内排序效率用比较次数来衡量。按所用策略不同,内排序又可分为插入排序、选择排序、交换排序、归并排序及...原创 2017-09-17 15:51:33 · 6831 阅读 · 0 评论 -
STL 中的Map用法
概念:map是一种关联容器,存储相结合形成的一个关键值和映射值的元素。Map是一种Pair Associative Container,意味者它的值的类型为pair.而且也是Unique Associative Container,也就是任何两个元素没有相同的Key值map方法原创 2017-07-27 11:15:11 · 489 阅读 · 0 评论 -
C++编码规则------注释
不好的代码不应该试图通过注释解决,应该重写代码! 一般的,代码应该通过适当的名字选择与显式的逻辑结构做到自身文档化,应该少使用注释来弥补差的代码。对编码层文档的主要贡献不是注释,而是好的程序风格。风格包含好的程序结构,直接使用和易于理解的方法、好的变量名、好的子程序名、命名常量、清晰的布局和最小的控制流及灵活的数据结构。所有的注释应该用英文写。由于目前的用户主要是国内的用户,故建议使用中文。原创 2017-05-02 12:58:58 · 608 阅读 · 0 评论 -
C++编码规则---空白符
一般操作的前后加一个空白符。C++的保留字后需跟随一个空白符。逗号后应该跟随一个空白符。冒号的前后加一个空白符在for语句中的分号后加一个空白符。 a = (b + c) * d; // NOT: a=(b+c)*dwhile (true) { // NOT: while(true) ...doSomething (a原创 2017-05-02 12:51:25 · 1523 阅读 · 0 评论 -
简单工厂模式
工厂模式客户类和工厂类分开 消费者任何时候需要某种产品,只需向工厂请求即可。 消费者无须修改就可以接纳新产品,缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供第一,基类存放数据第二,派生类有很多,派生类存放数据的操作第三,实现接口类,用静态函数实现调用各种派生类class Operation //基类存放数据{public: double number原创 2017-02-22 12:17:15 · 453 阅读 · 0 评论 -
抽象工厂
工厂模式客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无需修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。消费者不固定,工厂者不固定(工厂根据消费者动作)实现消费者抽象类,消费者派生类的实现,实例化就是消费者操作的抽象类,实现派生类各种操作,实例化的操作工厂的抽象类,抽象类包含了两个抽象类的接口(消费者,操作)抽象类实现了原创 2017-02-22 00:15:57 · 327 阅读 · 0 评论 -
策略模式
策略模式策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。Context(应用场景)1、需要使用ConcreteStrategy提供的算法 2、内部维护一原创 2017-02-21 23:03:43 · 350 阅读 · 0 评论 -
MFC写一个简单记事本
void CLinjtlDlg::OnClickedOpen(){ // TODO: 在此添加控件通知处理程序代码 CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"ALL Files(*.TXT)|*.TXT||",AfxGetMainWnd()); CString strPath原创 2016-11-21 20:31:02 · 5101 阅读 · 4 评论 -
BROWSEINFO用法
Visual C++(VC)中,BROWSEINFO结构中包含有用户选中目录的重要信息。(1)BRWOSEINFO结构typedef struct_browseinfo{ HWND hwndOwner; LPCITEMIDLIST pidlRoot; LPSTR pszDisplayName; LPCSTR lpszTitle; UINT ulFlags;原创 2016-11-14 21:12:02 · 4451 阅读 · 0 评论 -
MFC遍历所有的文档
遍历所有的文档void CTestDlg::OnBnClickedButton1(){ // TODO: 在此添加控件通知处理程序代码 CString myDataPath,pathStr,datafile; GetDlgItemText(IDC_EDIT1,pathStr); myDataPath=pathStr+"\\*.*"; CFileFind原创 2016-11-16 20:30:48 · 822 阅读 · 0 评论 -
解决不能从CONST CHAR *转换为LPCWSTR
有时候复制了整个框架程序确发现有编译不通过的问题,命名人家的程序编译能通过,到了自己编译的时候却编译不能通过,这个时候也许有各种问题,有些问题让人匪夷所思。编译器有时候会根据编码方式来选择定义为LPCWSTR还是LPCTSTRLPSTR: 32bit指针 指向一个字符串,每个字符占1字节。 相当于 char * LPCSTR: 32-bit指针 指向一个常字符串,每个字符占1字节。 相当于 co原创 2016-11-16 19:31:41 · 27354 阅读 · 1 评论 -
VS2013中如何解决error C4996: 'fopen'问题
控制台应用程序出现如下错误: error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.原创 2016-11-16 19:10:13 · 723 阅读 · 0 评论 -
单例模式
单例模式单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。class {public:protected:private:}a1;class Singleton{private: int i; static Singleton *instance; Singleton(int i原创 2017-02-22 17:40:02 · 478 阅读 · 0 评论 -
迭代器模式
迭代子模式迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中,从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。class Iterator;class Aggregate{public:原创 2017-02-24 15:53:12 · 411 阅读 · 0 评论 -
访问者模式
访问者模式访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。 访问者模式适用于数据结构相对未定的系统。 它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化,访问者模式使得增加新的操作变的很容易。就是增加一个新的访问者类。 访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类原创 2017-02-24 16:24:40 · 400 阅读 · 0 评论 -
C++编码规则----布局
布局与注释布局基本的缩排为4。 for (i = 0; i < nElements; i++) a[i] = 0; 缩排为1不明显;缩排大于4当嵌套深时,代码南阅读且一行代码被分割的机会加大。2、3与4是较好的选择。块的缩排应该使用下面的例1(java默认编排方式)或例2的布局,但不可以使用例3。函数和类的块必须使用例2的布局。建议使用例2。 while (!done) { do原创 2017-05-02 12:43:27 · 393 阅读 · 0 评论 -
函数传参指针和引用的差别
常规情况函数参数传递是所谓的“值传递”。啥意思,就是传的只是值,而不是变量自己以身相许。上面的例子来说,main中的ab传递给函数的ab发生了什么呢,是main中的ab把值传递给了函数的ab,这是四个变量!!!main的ab和swap的ab不是一码事!!!当swap通过传值得到a5b10后,在swap中会互换,但是main的中的ab怎么会变呢?他们传值完毕后就没有关系了! 引用什么叫引用?引用时原创 2017-03-07 13:04:15 · 671 阅读 · 0 评论 -
内存的思考题
程序有什么问题void GetMemory(char *p){ p=(char *)malloc(100);}void Test(void){ char *str=NULL; GetMemory(str); strcpy(str,"hello world"); printf(str);}答:程序崩溃 因为GetMemory并不能传递动态内存,Tes原创 2017-02-26 18:28:08 · 534 阅读 · 0 评论 -
strlen和sizeof的差别
strlenstrlen(char *)函数求的是字符串的实际长度,它求得方法是从开始遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止char aa[10];strlen(aa);//结果是不定char aa[10]={'\0'};strlen(aa);//结果为0char aa[10]="lin";//结果为3sizeofsiz原创 2017-02-26 13:00:59 · 407 阅读 · 0 评论 -
C语言面试题目
1、请填写 bool , float, 指针变量 与“零值”比较的 if 语句。 提示:这里“零值”可以是 0, 0.0 , FALSE 或者“空指针” 。例如 int 变量 n 与“零值”比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。 (1)请写出 bool flag 与“零值”比较的原创 2017-02-26 12:39:07 · 1970 阅读 · 1 评论 -
左值和右值
区分左值和右值能否用“取地址&”运算符获得对象的内存地址 对于临时对象,它可以存储于寄存器中,没办法用“取地址&”运算符 对于常量,它可能被编码到机器指令的“立即数”中,没办法用“取地址&”运算符std::string strHello = "Hello World!"Foo(strHello.substr(0, 5)); //右值引用, substr()返回作为Foo参数是临时变量,执行结束原创 2017-02-19 22:03:38 · 482 阅读 · 0 评论 -
建造者模式
建造者模式将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。class Person //抽象类,预留ule接口{public: virtual void createHead() = 0; virtual void原创 2017-02-24 17:47:55 · 413 阅读 · 0 评论 -
观察者模式
观察者观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。 监视,观察者,都有一个基类,派生,实现不同的效果,监视者的类,管理所有的观察者,增加或者删除,发出消息,让观察者处理,观察者的类需要接受消息并处理class Subject; //可以使用subjectclass Observer{原创 2017-02-24 16:47:03 · 401 阅读 · 0 评论