麻子来了
这个作者很懒,什么都没留下…
展开
-
在Linux的Eclipse中编译使用动态链接库
预备知识:linux系统中静态库文件以.a结尾,动态库文件以.so结尾调用动态库在程序运行时,操作系统会将.so文件加入到内存中,可以做到内存共享同时提供给多个客户使用linux的编译中有两种风格(C和C++)默认是使用C风格的。在动态链接库中,输出的是函数,而不输出类,若输出类只能被C++调用。程序执行时,系统查找文件目录的顺序为:在windows中是首先在当前目原创 2017-05-20 11:23:29 · 1877 阅读 · 0 评论 -
VS中C++静态/动态库文件的编译调试与使用
基础知识:不同语言之间可以通过调用动态链接库 (dll)来调用别人写好的函数同一语言可以调用别人写好的静态(lib)库静态链接库:是通过静态联编的,在链接时,link将自己的(.obj)二进制文件和别人的lib文件一起共同生成.exe文件。静态链接库的缺点是:1)比较吃内存2)生成的exe文件大3)升级不方便动态链接库:是将自己生成的EXE程序和需要调用的D原创 2017-05-20 17:45:49 · 8649 阅读 · 0 评论 -
关于__declspec(dllimport)的理解
一、基本概念_declspec(dllexport)与_declspec(dllimport)都是DLL内的关键字,即导出与导入。他们是将DLL内部的类与函数以及数据导出与导入时使用的。主要区别在于:dllexport是在这些类、函数以 及数据的申明的时候使用。用过表明这些东西可以被外部函数使用,即(dllexport)是把DLL中的相关代码(类,函数,数据)暴露出来为其他应用程 序使用。原创 2017-06-24 22:30:55 · 15503 阅读 · 0 评论 -
使用模块定义文件(.def)文件生成dll
一、什么是.def文件模块定义 (.def) 文件为链接器提供有关被链接程序的导出、属性及其他方面的信息。生成 DLL 时,.def 文件最有用。由于存在可代替模块定义语句使用的链接器选项,通常不需要 .def 文件。也可以将 __declspec(dllexport) 用作指定导出函数的手段。在链接器阶段可以使用 /DEF(指定模块定义文件)链接器选项调用 .def 文件。如果生成的 .ex原创 2017-06-25 20:03:50 · 5912 阅读 · 4 评论 -
C++模板类中迭代器用法备忘
模板类中的迭代器前一定要加typename,否则编译不通过。typenamevector<T>::iteratorit;原创 2019-11-10 10:36:28 · 791 阅读 · 3 评论 -
虚函数、纯虚函数与虚继承
纯虚函数:在抽象类(类中包含纯虚函数)中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。如果在基类中没有保留函数名字,则无法实现多态性。虽然抽象类不能定义对象(或者说抽象类不能实例化),但是可以定义指向抽象类数据的指针变量。当派生类成为具体类之后,就可以用这种指针指向派生类对象, 然后通过该指针调用虚函数, 实现多态性的操作。虚函数:实现动态多态C++基础之多态性原创 2017-09-12 22:21:52 · 663 阅读 · 0 评论 -
关于Const关键字
一、Const(1)变量const int a=2;//a中的值是不能发生变化的,定义常量时,应该立刻给其赋初始值。也可以写成int const a = 2; [a=a+2 X错误](2)指针int const *p;//常量指针。指针指向的是一个整型常量,p不是常量,p是变量。也可以写成const int *p;int *const p;//指针常原创 2018-01-07 21:10:10 · 325 阅读 · 0 评论 -
printf格式化输出
一、转换说明符%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)%c 字符%d 有符号十进制整数%f 浮点数(包括float和doulbe)%e(%E) 浮点数指数输出[e-(E-)记数法]%g(%G) 浮点数不显无意义的零"0"%i 有符号十进制整数(与%d相同)原创 2018-01-07 21:44:41 · 1470 阅读 · 0 评论 -
CString类型转换操作详解
引言CString是在MFC编程中常用到的数据类型,它是MFC中的一个类,很大程度上简化了MFC中的许多字符串的操作。而一些标准C/C++库函数是不能直接对CString类型进行操作的,所以我们经常遇到将CString类型转化char*等等其他数据类型的情况。char * 转换将CString 转换为 char *CString cstr="1234";char* ptemp=cstr.Getb...原创 2018-03-04 13:10:16 · 1600 阅读 · 1 评论 -
字符串常见问题梳理
一、C++基础之字符串与指针二、关于字符串常量指针三、关于Const关键字四、sprintf格式化输出五、printf格式化输出六、CString类型转换操作详解原创 2018-03-04 13:12:25 · 270 阅读 · 0 评论 -
使用win-VS开发调试Linux上的C/C++代码
本教程介绍如何使用VisualGDB CMake项目系统开发物理上位于Linux机器上的项目,使用Visual Studio和VisualGDB。与需要在Windows端下载源代码和标头或使用难以维护的共享文件夹的常规VisualGDB项目不同,直接访问的项目允许Visual Studio直接编辑Linux机器上的文件,始终确保您使用的是最新版本的文件。在开始之前,请安装VisualGDB 5...翻译 2019-02-17 21:42:20 · 815 阅读 · 0 评论 -
STL容器使用常见问题整理
1、vector的删除 //初始化 vector<int> vecTest; vecTest.push_back(100); vecTest.push_back(200); vecTest.push_back(300); vecTest.push_back(400); //删除 vector<int>::...原创 2019-07-07 09:27:10 · 562 阅读 · 0 评论 -
C++基础之类的虚继承
一、多重继承:很少用,现代高级语言弃用多继承1、基本语法:class D:public A,private B,protected C{类D新增加的成员}2、二义性:A类中有成员a,B类中有成员a,D类继承过来以后,a会出现二义性问题。解决办法:1>对于重名情况,添加作用域,c.a=100;c.A::a=100;(这种写法)2>对与基类中的成员由多份存储变为单一存储原创 2017-08-06 11:05:43 · 450 阅读 · 0 评论 -
C++基础之多态性与虚函数
(1)多态定义:计算机在编译时或运行时,根据我们实际的代码自动调用不同的函数的能力为多态。(2)多态分类:(编译时)静态多态:前期绑定:a)函数重载 b)模板(运行时)动态多态:(默认)后期绑定:根据指针的实际数据类型自动调用不同函数(功能)(3)动态多态实现原理:1>子类继承了所有父类的产品 2> virt原创 2017-08-15 22:34:56 · 525 阅读 · 0 评论 -
如何在VS中进行单元测试
在实际项目工程中,我们经常需要对所写的代码进行调试,但是随着工程量的加大,涉及人员的增多,普通的调试无法满足实际的应用需求。这里简述如何进行单元测试:(单元测试入门)1、首先我们在已经编写好的项目中右击解决方案,新建项目-->测试项目(本机单元测试项目)2、在新建测试项目上右键,添加引用,点击添加新引用,找到需要测试的工程点击确定3、在我们新建的测试工程中的cp原创 2017-05-18 22:09:56 · 8502 阅读 · 1 评论 -
VS2013编写C++程序检测内存泄漏
1、将内存泄漏软件安装在VS安装目录下2、在C++项目的main函数的最开头加入#include"vld.h"3、运行程序,检测内存是否泄漏!4、若出现:WARNING: Visual Leak Detector detected memory leaks!则说明内存泄漏,提示信息下面会有详细的说明。 若出现:"No memory leaks detected"则说明原创 2017-05-18 20:11:39 · 1778 阅读 · 0 评论 -
C++基础之数组
一、易错易忽略点注意:1、数组必须在创建时将其大小确定下来,不能在以后改变大小。int a[’a’] 正确,会自动把a转换为ASCII的97int n=100; int a[n];//错误 const int n=100; int a[n]; //正确编译每次碰到一个变量名就对应一个空间访问的操作。而此时的n只有在运行时才能读取其值,进而确定其空间大小,所以编译报错。但原创 2017-07-30 23:54:11 · 330 阅读 · 0 评论 -
C++基础之字符串与指针
一、字符串1、字符串默认用字符数组来存储。2、strlen求字符串长度是不包括\0的3、char a[]={“Hello World!”};或 char a[]=”Hello World!” // ’\0’由计算机自动加上。char c3[3][5]={{ 'a','b','c','d','\0'},{'m','n','p','\0'},{'x','y','z'原创 2017-07-31 11:25:00 · 4584 阅读 · 1 评论 -
常用位运算函数源码解析
计算机中数是按补码形式存储的 //判断该整数是否是2的整数次方 2的整数次方特点是转换为二进制数,1、只在一个位置上有一个1(且这个位置不是最低位)bool IsPowerOfTwo (unsigned int value) { return (value > 0) && ((value & (value - 1)) == 0); } bool IsPow原创 2017-08-01 12:01:40 · 456 阅读 · 0 评论 -
C++基础之结构体
1、结构体变量名不是地址,不能单独使用(结构体变量的地址为第一个成员变量的地址)。2、结构体变量开放了内存区,存在栈区。3、结构体中是有拷贝构造函数的,结构体变量默认是深拷贝(又在内存区中开辟了一段内存)【结构体变量名作为形参和结构体变量实参之间是深拷贝】4、typedef struct student{int id;char *name;}student; /原创 2017-08-01 16:31:36 · 2201 阅读 · 0 评论 -
C++基础之数据类型表达式与基本输入输出
1、VS2013默认是32位(具体的需要根据开发环境操作系统而定)char型不管什么系统和开发环境永远占一个字节。bool型占1个字节32位系统中,short占 2 字节, int 、float、long 都占 4 字节, 只有double 占8 字节2、3、八进制:由数字0开头十六原创 2017-07-25 23:16:42 · 586 阅读 · 0 评论 -
全局变量、局部变量、静态全局变量、静态局部变量、堆变量、栈变量的异同
一、先介绍虚拟内存的分配:虚拟内存(从0x00开始编码)32位系统: 每个程序都独享4G内存(虚拟)64位系统: 每个程序都独享16G内存(虚拟)虚拟内存分为系统空间和用户空间1、系统空间包括:(内核程序、驱动可以直接访问该区域)1>内核2>共享数据区(如剪切、粘贴,一般不能直接访问)3>驱动程序(如显卡的显存对应的程序)一般程序只访问用户空间,只有驱动程序原创 2017-06-01 23:21:16 · 1572 阅读 · 0 评论 -
C++基础之面向对象(一)
一、对象本身是占内存的,但是类是对象的描述(相当于类型int),不占内存二、类中实现的函数默认为inline函数但如果类中只是函数的声明,而函数的实现在类外。则若需要使函数为inline函数,需要自己在函数名前先加inline 三、计算机对所有函数在程序区中都只有一份拷贝,此外静态区变量在内存中也只有一份拷贝,内存地址是固定的四、this指针所有原创 2017-08-01 20:29:57 · 288 阅读 · 0 评论 -
C++基础之面向对象(二)
一、友元友元函数:1、一般在操作符重载时会使用,其他情况很少使用。2、在A类中声明函数B是A类的友元函数,则函数B可以访问A的数据成员。3、友元函数至少有一个参数(这个参数为声明类的引用)(因为:全局函数是没有this指针的,我们只能通过参数来确定访问的是那个对象的数据成员)如果全局函数找不到this指针(没有类的引用作为函数参数),则只能访问静态成员变量和静态成员函数。原创 2017-08-03 20:32:09 · 264 阅读 · 0 评论 -
C++基础之类继承1
一、C++继承(1)继承是多根继承(2)子类继承所有父类的成员,但子类是否能访问父类成员需看父类成员关键字。(3)继承又称为拓展,子类的指针可以安全的赋给父类的指针。而父类的指针不能直接赋给子类指针(可以使用强制转换[非安全转换,可能成功可能失败],将父类指针赋给子类指针)(4)继承分为public、protected、private三种,对子类成员可见性产生影响。(5原创 2017-08-06 10:43:25 · 341 阅读 · 0 评论 -
#pragma pack用法笔记
程序编译器对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,原创 2017-06-09 22:44:53 · 353 阅读 · 0 评论