C/C++
文章平均质量分 67
wojiaopanpan
努力向上,独立,开朗乐观,热爱生活
展开
-
windows编译openssl+curl静态库
转载[有截图的一步步照做的编译老版本openssl1.0.2p,先看下](https://cloud.tencent.com/developer/article/1343632)[较新的编译zlib/openssl/curl的方法](https://blog.csdn.net/lixiang987654321/article/details/81154613),这个blog里面步骤很清晰,基本照着做就行了,注意在libcurl属性页,Librarian / General /additional de转载 2020-06-04 17:26:49 · 1822 阅读 · 0 评论 -
《C++Primer》3.16 面向对象编程
在C++中,基类必须指出希望派生类重定义哪些函数,定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。通过动态绑定我们能够编写程序使用继承层次中任意类型的对象,无须关心对象的具体类型。一旦函数在基类中声明为虚函数,它就一直是虚函数,派生类无法改变该函数为虚函数这一事实。派生类重定义虚函数时,可以使用virtual保留字,但不是必须这样做。用作原创 2012-03-19 11:50:48 · 570 阅读 · 0 评论 -
《C++Primer》 3.19 模板与泛型编程
函数模板是一个独立于类型的函数,可作为一种方式,产生函数的特定类型版本。在函数模板形参表中,关键字typename和class具有相同涵义。使用typename更为直观。如果要在模板内部定义指定类型,可以在成员名前加上关键字typename模板形参不必都是类型。在调用函数时非类型形参将用值代替,值的类型在模板形参表中指定。编写泛型代码的两个重要原则:1.模板的形参是const引原创 2012-03-21 15:41:54 · 815 阅读 · 0 评论 -
《C++Primer》3.21 用于大型程序的工具
异常处理:执行throw时,不会执行跟在throw后面的语句,而是将控制从throw转移到匹配的catch,该catch可以是同一函数中局部的catch,也可以在直接或间接调用发生异常的函数的另一个函数中。抛出异常时如果是抛出指针,可能出现分割(解引用指向派生类对象的指针)或者更严重的问题,所以一般不采取这种方式。栈展开:如果对抛出异常的函数的调用是在try块中,则检查与该try相关的ca原创 2012-03-21 17:04:22 · 505 阅读 · 0 评论 -
写一个函数,完成内存之间的拷贝
在网上找了个题目如题目,本来以为就跟字符串的复制一样,一个while就行了,看了答案才知道,内存处理没有那么简单,因为我们时刻要小心内存处理问题。但是看了代码,想了半天才想同原理,真是惭愧啊!本来打算准备用个坐标轴来描述这个原理的,只是我个人比较懒的去画,就简单的说下,以明示自己下次不能犯这样的错误了。方法一:void* mymemcpy( void *dest,转载 2012-05-16 09:53:15 · 9551 阅读 · 1 评论 -
有关内存的思考题(积累中)
有关内存的思考题(积累中)void GetMemory(char *p){p = (char *)malloc(100);}void Test(void){char *str = NULL;GetMemory(str);strcpy(str, "hello world");printf(str);}请问运行Test 函数会有什么样的结转载 2012-05-16 11:05:16 · 3465 阅读 · 0 评论 -
heap和stack的区别
一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放,(malloc之类的) 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3转载 2012-05-16 16:05:57 · 673 阅读 · 0 评论 -
C++虚表
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过转载 2012-05-16 17:18:34 · 688 阅读 · 0 评论 -
关于COM及套间(Apartment)知识
什么是COM组件? COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成。 COM组件是遵循COM规范编写的 COM组件是一些小的二进制可执行文件 COM组件可以给应用程序、操作系统以及其他组件提供服务 自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序 COM组件可以动态的插入或卸出应用 COM组件必须是动态链接的转载 2012-05-17 09:31:58 · 2905 阅读 · 0 评论 -
elipse中jni实现动态链接库编译及调用(Mac系统/ndk r10b)
1.jni(java native interface)是指介于java和C/C++代码之间的一个接口层。实现的主要步骤有:2.以下是在Mac平台上原创 2017-09-05 15:58:29 · 418 阅读 · 0 评论 -
《C++Primer》3.15重载操作符与转换
重载操作符是具有特殊名称的函数:保留字operator后接需定义的操作符符号。像任意其他函数一样,重载操作符具有返回类型和形参表。不能重载的操作符::.*.?:重载操作符必须具有至少一个类类型或枚举类型的操作数,这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。重载操作符并不保证操作数的求值顺序,所以,重载&&、||、&或逗号原创 2012-03-15 12:07:22 · 741 阅读 · 0 评论 -
《C++Primer》 3.14 复制控制
复制构造函数(copy constructor)是一种特殊的构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型对象对它进行初始化时使用。析构函数(destrustor)是构造函数的互补:当对象超出作用域或动态分配的对象被删除时,将自动应用析构函数。用于完成资源回收。合成复制构造函数的行为是,执行逐个成员初始化,将新对象初始化为原对象的副本原创 2012-03-14 16:33:59 · 535 阅读 · 0 评论 -
《C++primer》 表达式 语句
使用关系操作符的时候不应该串接使用关系操作符。复合赋值操作符: a op= b,其中的“ op= ”可以是以下十个中的任何一个+= -= *= /= %= >= &= ^= |=如果指针指向不是用new分配的内存地址,则在该指针上使用delete是不合法的。对0值指针进行delete操作时合法的命名的强制类型转换: cast-name(ex原创 2012-03-05 22:03:07 · 562 阅读 · 0 评论 -
《C++primer》 函数 标准IO库
函数的返回类型可以是内置类型(如int或者double)、类类型或复合类型(如int&或string*),还可以是void类型,表示函数不返回任何值。但是函数必须指定返回类型。函数的返回值用于初始化在调用函数处创建的临时对象。当函数返回引用类型时,没有复制返回值,相反,返回的是对象本身。千万不要返回局部对象的引用。返回引用的函数返回一个左值千万不要返回指向局部对象的指针原创 2012-03-07 15:40:02 · 545 阅读 · 0 评论 -
《C++primer》 顺序容器
顺序容器 vector支持快速随机访问list支持快速插入/删除deque双端队列顺序容器适配器 stack后进先出(LIFO)栈queue先进先出(FIFO)栈priority_queue有优先级管理的队列容器元素类型必须满足条件:1.支持赋值运算,2.对象可以赋值原创 2012-03-08 12:00:55 · 637 阅读 · 0 评论 -
《C++primer》关联容器
关联容器(associative container)支持通过键来高效地查找和读取元素。主要有map和set类型。map的元素以键-值对的形式组织,而set仅包含一个键map关联数组,元素通过键来存储和读取set大小可变的集合,支持通过键实现的快速读取multimap支持同一个键多次出现的map类型multiset支持同一个键原创 2012-03-09 11:20:41 · 565 阅读 · 0 评论 -
C语言运算符优先级
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .成员选择(对象)对象.成员名转载 2012-03-27 17:08:03 · 568 阅读 · 0 评论 -
编写一个函数,实现把C/C++程序代码中的注释去掉,并把结果返回。
#include #include #include #include #include /** * 功能:移除C/C++程序代码中的注释 * * 输入:指向C/C++程序代码的指针 */voidremove_comment(char *buf, size_t size){ char *p, *end, c; char *sq转载 2012-03-29 09:59:22 · 3323 阅读 · 0 评论 -
《C++Primer》 快速入门 变量和基本类型
while (std::cin>> value)首先从标准输入读取下一个数并且将读入的值保存在value中,然后执行while循环中的操作。编译文件的时候如果遇到“ unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your原创 2012-03-01 11:55:50 · 1588 阅读 · 0 评论 -
《C++primer》 泛型算法
泛型算法(generic algorithm)是为了实现对容器元素的多种操作而设计的。算法永不执行容器提供的操作:泛型算法本身从不执行容器操作,只是单独依赖迭代器和迭代器操作实现。对于写容器元素的算法,必须确保算法所写的序列至少足以存储要写入的元素。对于不检查写入操作的算法,需要弄清楚操作是否合法哦。也可以引入back_inserter,相当于在vec上调用push_back目标迭原创 2012-03-13 10:48:32 · 713 阅读 · 0 评论 -
《C++Primer》3.13 类
类背后蕴含的基本思想是数据抽象和封装。他们可以提供两个优点:1.避免类内部出现无意的、可能破坏对象形态的用户级错误。2.随时间推移可以根据需求改变或缺陷报告来完善类实现,而无须改变用户级代码。可以通过typedef,使用类型别名来简化类在声明之后、定义之前的类是不完全类型,而创建类的对象之前,必须完整地定义该类。显式引用this指针的必须情况:当需要将一个对象作为整体引用而不是引用对象原创 2012-03-13 17:38:59 · 516 阅读 · 0 评论 -
《C++primer》标准库类型 数组和指针
使用using namespace::name声明的话,就可以直接引用名字了using声明每次只能声明一个名字如果用using声明了string类型,那么系统可以使用几个默认构造函数string s2(s1) 将s2初始化成为s1的一个副本string s3("value") 将s3初始化成为一个字符串字面值副本string s4(n原创 2012-03-05 10:11:11 · 939 阅读 · 5 评论