`
文章列表

expat总结

#include<iostream> #include <windows.h> #include "expat.h" using namespace std; #ifdef XML_LARGE_SIZE #if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 #define XML_FMT_INT_MOD "I64" #else #define XML_FMT_INT_MOD "ll" #endif #el ...

ATL总结二

 1.智能指针    智能指针封装了 QueryInterface / Release 以及  CoCreateInstance / Release 两对方法,因此使用该类的用户不用担心com是否被释放。 ATL提供了两个智能指针类: CComPTR / CComQIPtr。 CComPtr<IMath> ptrMath; HRESULT hr; hr = CoCreateInstance(CLSID_Math, NULL, ...

ATL总结一

    ATL(Active Template Library,活动模板库)使用c++模板作为自己的实现的基本特性。模板分为两种:函数模板和类模板。    一. ATL如何使用模板    以下例子并没有涉及真正的ATL类,只是展示ATL如何使用模板计数在基类里访问成员函数。首先我们看下面的两个类: class CBase { public: CBase(){} ~CBase(){} void BaseMethod() { cout << "BaseMethod in Base" << endl; } }; ...

Com总结三

     Com里面的引用计数使用要特别小心,为了避免误调AddRef和Release,我们可以使用以下一些方法来简化编程。    一. 使用智能指针     智能指针实际上重载了-->操作符,所有在智能指针上调用的函数,实际上上都转发到了内部的接口指针上。而当智能指针离开了作用域的时候,会自动调用析构函数,而我们可以在析构函数中对内部的接口指针调用Release操作。在ATL中,有实现好的模板类,CComPtr, CComQIPtr.

Com总结二

  一. HRESULT       对于该返回值,只要记住一点,一定要使用SUCCEEDED和FAILED宏来判断,不要直接把它与S_OK,S_FALSE等等来比较。    二. GUID     包含头文件OBJBASE.H。   由于GUID值占用了16个字节,因此一般不用值传递GUID参数 ...

Dll入门

     有一些东西是一定要动手实现的,学习有的点可以慢慢积累,但是有一些基本的盲区是一定不要跨过去的。        这里不过多的讲解Dll的内容,只是记录一下常用的两种dll编写方法。   一. Dll的编写        第一种方法:       首先打开vs2010---> win32 application--->选择一个dll工程(MyDll)---->不要选择空项目,让它帮你生产dllmain函数入口。你熟悉以后也可以自己写。   // dllmain.cpp #include "stdafx.h" BOOL AP ...

Com总结一

 
(1)Com组件是?     Com组件是以Win32动态链接库(DLL)或可执行文件(EXEs)的形式发布的可执行代码组成的。   (2)接口概念     DLL的接口就是它所输出的那些函数;C++类的接口则是该类的一个成员函数集。对于Com来说,接口是一个包含一个函数指针数组的内存结构。每一个数组元素包含的是一个由组件所实现的函数的地址。对于Com而言,接口就此内存结构。   (3)接口的作用     在Com中接口就是一切。对于客户来说,一个组件就是一个接口集。客户只能通过接口才能同com组件打交道。    用类C++的方法来实现组件  (1)接口定义 #de ...

c++---高级技术

    博客分类:
  • c++
 
   1. 异常对象没有专门的头文件。    2.不应该抛出指向局部对象的指针以及局部对象。        3.异常的类型与与catch说明符完全匹配:      (1)允许从非const 到 const的转换。      (2)允许从派生类到基类的转换。      (3)将数组转换为指向数组类型的指针,将函数转化为指向函数类型的指针。    不允许标准算术转换,比如int到double;不允许类类型定义的转换。如下例子: /* 功能:1.测试异常类需要头文件吗?答案:不需要 2.测试try中的局部对象在throw对象时能否丢局部变量? 答案: 在throw ...
 先参考http://blog.csdn.net/iamkila/article/details/7266890

c++面试题

    博客分类:
  • c++
 1. 如何设计一个不能被继承的类   http://snoweagleofself.blog.163.com/blog/static/9446014320088183176994/
美团: http://www.itmian4.com/forum.php?mod=viewthread&tid=3511&fromuid=1 http://www.itmian4.com/forum.php?mod=viewthread&tid=3463&fromuid=1   创新工场: http://www.itmian4.com/forum.php?mod=viewthread&tid=3512&fromuid=1

面试题汇总

1.题目:给定数组A,大小为n,数组元素为0到n-1的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计哪些数字没有出现,哪些数字出现了多少次。要求在O(n)的时间复杂度,O(1)的空间复杂度下完成。       解答:这种题目,既然只用这么少的空间,要么从异或角度考虑,相当于只能有一个变量出现。要么充分的利用给定的数组空间。而且时间复杂度为O(n)的话,必然就是遍历那个数组了。              我们理解一下这个概念:              假如一个数组中某个数字是 a[i] = t ( 0<=t < n ),那么 如果 a[i] = t ...
      equals默认的比较是比较两个对象的引用是否相等,在Java里面,所有的东西都是对象,就像c++里面的指针new出来的东西,因此不可能有两个是一样的,当我们想改变这种判断准则时,则必须重写equals方法,比方说当两个对象所代表的值相等我们就认为他们相等。       hashCode方法主要是返回这个对象在内存中的hash码,这个hash码是唯一标识这个对象的,跟着需要重写他的原因是为了常规协议,因为通常我们说,两个对象如果相等,那么他们的hash码也应该是要相等的,满足概念上的一致性,特别是在容器的应用方面,例如set, 会导致我们存储两个相等的对象(因为hashCode不 ...
     拓扑排序是,将有向图中每个点按照一定的顺序排列。如果有向边 vi->vj存在,那么vi结点必须出现在vj之前。     算法思想:     (1)首先我们利用邻接表保存图结构。     (2)利用一个数组indegree[]数组来记录每个结点的入度。     (3)将入度为0的点加入到堆栈 stack中。     (4)将结点node出栈,清除node发出每一条边node->to,并将indegree[to]--。     (5)继续寻找入度为0的点,加入栈,直到栈为空。      时间复杂度:O(V+E) #include <iostream&g ...
对于简单的一维数组动态内存分配和释放,相信大家都是知道的,不过还是举个例子吧: int *array1D; //假定数组长度为m //动态分配空间 array1D = new int [m]; //释放 delete [] array1D; 如果我们使用const来修饰数组的话,必须这样来定义:         const int *a = new int[10](),必须加上(),意思是同时初始化为0,否则以后就没有机会初始化了。   但是,对于多维数组动态分配,大家可能不太熟悉。下面以常见的二维和三维数组为例来说明: 1. 二维数组的动态分配和释放 i ...
Global site tag (gtag.js) - Google Analytics