C++
文章平均质量分 62
RoyKuang07
这个作者很懒,什么都没留下…
展开
-
C++常见知识点复习-赋值构造函数
(1) 一个空类或者空类对象的大小?由于对象在内存中必须占有一定的空间,因此,即使类是空的,这个类的对象也要占用一定的空间。VS和G++中空类的大小都是1。(2) 在空类中添加构造函数和析构函数,这个类对象的大小?这里要明确的是:一个类对象在内存中包含哪些成员?在C++中,类对象中只有非静态的数据成员和虚表指针(如果有的话)。也就是说,虽然函数好像包含在对象中,但是,经过编原创 2016-08-10 11:22:24 · 798 阅读 · 0 评论 -
继承关系总结
一、父类与子类1.父类与子类的相互转换派生类的对象可以赋给基类,反之不行基类的指针可以指向派生类,反之不行基类的引用可以初始化为派生类的对象,反之不行派生类指针必须强制转换为基类指针后才可以指向基类基类指针转换为派生类指针容易导致崩溃性错误虚基类的引用或派生不能转换为派生类[cpp] view plain copy原创 2016-10-17 18:33:45 · 486 阅读 · 0 评论 -
error C2252: 只能在命名空间范围内显式实例化模板
今天在搞毕设时,运行网上的一个SDK,出现如下的错误提示error C2252: 只能在命名空间范围内显式实例化模板网上查了下,是这个错误是由于vs2010全局命名空间中找不到要导出的STL类。修改很简单:将需要导出的STL类从自定义的类中移动到全局命名空间中。template class __declspec(dllexport) std::allocator原创 2016-10-30 21:56:08 · 4675 阅读 · 1 评论 -
记录一下: 理解 __declspec(dllexport)和__declspec(dllimport)
1、解决的问题: 考虑下面的需求,使用一个方法,一个是提供者,一个是使用者,二者之间的接口是头文件。头文件中声明了方法,在提供者那里方法应该被声明为__declspec(dllexport),在使用者那里,方法应该被声明为__declspec(dllimport)。二者使用同一个头文件,作为接口,怎么办呢?2、解决办法: 使用条件编译:定义一个变量,针对提供者和使用者,转载 2016-10-31 19:31:56 · 2271 阅读 · 0 评论 -
Linux文件描述符/Win文件句柄-C语言FILE指针
1.“文件”的由来一个程序的I/O指代了程序与外界的交互,包括文件、管道、网络、命令行、信号等。更广义地讲,I/O指代任何操作系统理解为“文件”的事务。许多操作系统,包括Linux和Windows,都将各种具有输入和输出概念的实体——包括设备、磁盘文件、命令行等——统称为文件,因此这里所说的文件是一个广义的概念。对于一个任意类型文件,操作系统会提供一组操作函数,这包括打开文件、读文原创 2016-12-21 15:11:20 · 1033 阅读 · 0 评论 -
文件描述符和文件指针的相互转换
1文件描述符,在linux系统中,设备也是以文件的形式存在,要对该设备进行操作就必须先打开这个文件,打开这个文件就会获得这个文件描述符,它是个很小的正整数,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。文件描述符的优点:兼容POSIX标准,许多Linux和UNIX系统调用都依赖于它。缺点:不能移植到非UNIX系统上,也不直观。 文件指针,C语言中原创 2016-12-21 15:33:40 · 1084 阅读 · 0 评论 -
C语言文件指针和文件描述符相互转换
记录一下:文件指针向文件描述符转换的时候用fileno函数没问题,然而文件描述符向文件指针转换的时候却出现问题,大于2以上的值就出错。fdopen。结果采用iob_func()函数却可以,暂时记录一下,后面有时间再探讨其中的原因。 char* s = "hello k7k!"; FILE* fp1 = fopen("x.txt", "w+"); fprintf(fp1, "%s\n",原创 2016-12-21 19:32:12 · 947 阅读 · 0 评论 -
C语言实现简单的日志封装
在后台程序运行出问题时,详尽的日志是抓错不可缺少的帮手,这里提供一个能自动记录日志触发点文件名、行号、函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。ANSI C标准中有几个标准预定义宏(也是常用的):__LINE__:在原创 2016-12-19 21:32:36 · 2002 阅读 · 0 评论 -
从DLL中导出函数
这两天需要从算法DLL中导出函数,记录一下步骤。1:http://stackoverflow.com/questions/8696653/dynamically-load-a-function-from-a-dll2:http://blog.csdn.net/heyabo/article/details/8721611原创 2017-01-06 21:56:55 · 438 阅读 · 0 评论 -
Win7上编mongodb cpp driver
要从Qt里面访问MongoDB,Qt没有提供MongoDB的Driver,只好用MongoDB官方的C++Driver了。看了MongoDB官方的描述之后,又在网上搜了一番,发现并没有预编译好的版本,没有办法,只能自己动手编译了。看到了好多关于编译这个Driver的Blog,上面的方法都很复杂,要用scons,要用boost,还有的人要动手编译boost并给出参考页面,顿时心里凉了半截。看到官方文转载 2016-12-30 22:39:00 · 633 阅读 · 0 评论 -
C++ 动态调用DLL
这几天正好遇到,记录一下:C++如何调用DLL呢,有两种,一种是静态,另外一种是动态,即通过调用windowsAPI 来加载和卸载DLL,具体思路:1.先编写一个DLL,我这里是直接在CPP里编写了函数声明和定义,没有单独的头文件,因为很多情况下的DLL都是没有和lib和头文件一起的。2.然后另外新建一个项目,来调用DLL,方法是:1.声原创 2016-12-20 22:08:25 · 939 阅读 · 0 评论 -
system 将参数传递给bat批处理文件
需要在调用程序里将参数传递给bat脚本文件的程序,记录一下: //std::string path("../InputVehicle"); //const char* input_dir = "../InputVehicle"; //const char* input_dir = path.c_str(); //char s[248]; //sprintf_s(s,"原创 2017-01-11 20:44:41 · 1749 阅读 · 0 评论 -
C++ Boost库初次尝试
Boost库被称为C++的准标准库,功能非常强大,最近准备学习这个库。下面是一个示例程序// ProtocolBufferTEST.cpp //#include "stdafx.h"#include #include #include //test type cast with boostvoid TEST_LeCast(){ using boost::lexica原创 2017-02-09 19:38:07 · 2117 阅读 · 0 评论 -
常用C++语法特性
值得借鉴的代码技巧1)枚举类型2)类的宏实现3)数据分离 通过中间桥连接4)虚函数实现接口功能5)以json数据的读写作为例子原创 2017-01-19 14:07:22 · 720 阅读 · 0 评论 -
new一个二维数组的几种方法
定义二维数组char array[x][y]; 1.只定义个一维的就可以了 char *array; array = new char[x*y]; 访问的时候*(array+i*y+j)表示array[i][j] 2.定义一个二维数组 char **array1 array1 = new char *[x]; for(i=0;iarray1[i] = new c原创 2016-09-05 16:47:50 · 4600 阅读 · 0 评论 -
关于getline输入的一个小问题
今天做OJ的时候,遇到连续输入一行和接着输入单个字符的情况,然而第二次循环的时候却会出问题,大概分析了下,应该是缓冲区出问题了。所以加上 char s; string str; while (getline(cin, str)) { cin >> s; cout << str.c_str()<<" "<<s<<endl; cin.ignore(); }则不会错误.随手记原创 2016-09-05 15:49:12 · 502 阅读 · 0 评论 -
C++常见知识点复习-如何限制类对象只能在堆上或者栈上分配
怎么样才能控制对象分别只在堆上和栈上创建了1 限制类对象只能在堆上分配采用跟单例模式类似的方法:class test { test() { } ~test() { }public: static test* create() { return new test(); } void destroy()原创 2016-08-10 12:30:59 · 741 阅读 · 0 评论 -
STL 中vector的reserve()和resize()
C++中vector的reserve()和resize()1 reserve()首先,从字面意思理解,reserve的意思是:预留。那么这个函数是如何控制空间的呢?vectorint> vec(10);cout << vec.size() << endl;cout << vec.capacity() << endl;vec.reserve(5);cout <<原创 2016-08-10 12:38:08 · 1098 阅读 · 0 评论 -
程序员面试金典目录
转:程序员面试金典-快课网1.1 判断一个字符串中的字符是否唯一1.2 字符串翻转1.3 去除字符串中重复字符1.8 利用已知函数判断字符串是否为另一字符串的子串2.1 从链表中移除重复结点2.2 实现一个算法从一个单链表中返回倒数第n个元素2.3 给定链表中间某结点指针,删除链表中该结点2.4 求由两个链表结点组成的数之和转载 2016-08-22 09:17:55 · 682 阅读 · 0 评论 -
库函数实现总结
版权声明:本文为博主原创文章,未经博主允许不得转载。[cpp] view plain copy print?//strcpy()函数的使用 char *strcpy(char *dest,const char *src){ assert(dest != NULL && src != NULL); char *原创 2016-08-22 09:44:46 · 329 阅读 · 0 评论 -
C代码的内存布局
// code_area.cpp : //#include "stdafx.h"#include #include #include int a = 0; //全局初始化区char* p1; //全局未初始化区void main(){ int b; char s[] = "abc"; //s栈,"abc"静态存储区||拷贝副本到栈区||数组变量,分配的原创 2016-08-25 10:12:49 · 426 阅读 · 0 评论 -
C++的运行期多态和编译期多态
前言今日的C++不再是个单纯的“带类的C”语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C++发展中最为出彩的那部分。在面向对象C++编程中,多态是OO三大特性之一,这种多态称为运行期多态,也称为动态多态;在泛型编程中,多态基于template(模板)的具现化与函数的重载解析,这种多态在编译期进行,因此称为编译期多态或静态多态。在本文中,我们将了解:原创 2016-08-25 10:57:39 · 673 阅读 · 0 评论 -
C++ 对象生命周期
代码代码说明:类A,含构造函数和析构函数普通函数fun,函数体里新建了类A的局部自动对象FunObj和局部静态对象InStaObjmain方法新建了类A的局部自动对象MainObj,调用fun方法外面新建了A的的外部静态对象ExStaObj和外部对象GblObj[cpp] view plain copy #in原创 2016-08-25 11:23:26 · 3669 阅读 · 0 评论 -
C++构造析构顺序
析构函数与构造函数的顺序继承先看看下面的代码#include using namespace std;class A{public: A(){cout "Construct A" endl;} ~A(){cout "Destruct A" endl;}};class C{public: C(){cout "Construct C" endl;原创 2016-08-25 11:53:14 · 1857 阅读 · 0 评论 -
new和malloc的10点区别
C++中malloc和new的10点区别前言几个星期前去面试C++研发的实习岗位,面试官问了个问题:new与malloc有什么区别?这是个老生常谈的问题。当时我回答new从自由存储区上分配内存,malloc从堆上分配内存;new/delete会调用构造函数/析构函数对对象进行初始化与销毁;operator new/delete可以进行重载;然后强行分析了转载 2016-08-25 12:19:28 · 396 阅读 · 0 评论 -
C语言实现多态
C 还是 C++?C++ 中的多态是指「通过基类对象的指针或者基类对象的引用调用虚函数」,表现更多派生类的特性,但根据 C++ 多态的实现,我们发现这种方法存在一定的空间和效率的折损。不可否认,多态轻松解决了很多工程中遇到的问题,这与 pure C 的解决方法比起来,更为优雅。在考虑移植性上,C 的光芒要盖过 C++,但 C++ 的多态是可借鉴的,于是用 pure C 来模仿 C+原创 2016-08-25 12:27:21 · 704 阅读 · 0 评论 -
C++虚函数表一点理解
一 引言C++面向对象语言的一大特性就是抽象,在程序设计上的体现就是鼓励面向接口编程,而不要面向具体实现编程。这里所说的抽象和接口与C++的多态性密切相关。C++的多态分为静态多态(编译时多态)和动态多态(运行时多态)两大类。静态多态通过重载、模板来实现;动态多态就是通过本文的主角虚函数来体现的。虚函数是C++语言一个非常重要的特性,不同编译器对此特性的实现机制也略有差别,虽然具体实现细节原创 2016-08-25 17:07:32 · 1394 阅读 · 4 评论 -
C/C++的mem函数和strcpy函数的区别和应用
C/C++的mem函数和strcpy函数的区别和应用mem系列函数是面试的时候常考的知识点,我们需要熟练掌握这三个函数的原理和代码实现,要能准确无误的写出代码。memcpy、memset和memset三个函数在使用过程中,均需包含以下头文件:1234//在C中#include //在C++中#include m转载 2016-08-25 18:33:15 · 644 阅读 · 0 评论 -
C++中vector<> resize()和reserve区别
1 reserve()首先,从字面意思理解,reserve的意思是:预留。那么这个函数是如何控制空间的呢?vectorint> vec(10);cout << vec.size() << endl;cout << vec.capacity() << endl;vec.reserve(5);cout << vec.size() << endl;cout << vec.ca原创 2016-09-17 14:53:44 · 638 阅读 · 0 评论 -
boost 分别编译x86和x64的库
2.vs2015开发人员命令提示中运行bootstrap.bat3.x86安装则输入命令: b2.exe --prefix=D:\boost\x86 --build-type=complete --build-dir=build_tmp toolset=msvc-14.0 address-model=32 install ("D:\boost\x86"是将要生成32位的incl转载 2017-02-20 09:43:28 · 3208 阅读 · 0 评论