
C/C++
文章平均质量分 82
映影留心
编程反映世界->编程重塑世界
展开
-
26 C/C++之《C专家编程》笔记
P21:C预处理器实现的主要功能:字符串替换;头文件包含;通用代码模板的扩展。P17P24:C语言的演化之路:-------C/C++知识持续发布中,如果能学到一点点知识,请收藏关注,共同学习进步--------------------...原创 2020-01-13 16:31:45 · 135 阅读 · 0 评论 -
25 C/C++之##__VA_ARGS__
__VA_ARGS__ 宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错。-------C/C++知识持续发布中,如果能学到一点点知识,请收藏关注,共同学习进步--------------------...原创 2020-01-02 16:50:34 · 422 阅读 · 0 评论 -
24 C/C++之随机字符串生成
#include <iostream>#include <time.h>std::string randstr(int nstr){ std::string retstr = ""; if (nstr > 0) { srand((unsigned)time(NUL...原创 2019-12-06 11:20:49 · 671 阅读 · 0 评论 -
5 C/C++之const与#define的区别
C++语言可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的优点: const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误(边际效应)。 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。在C++程序中只使用const...原创 2019-08-17 12:15:13 · 112 阅读 · 0 评论 -
6 C/C++之内联函数和宏的区别
内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。内联函数要做参数类型检查,这是内联函数跟宏相比的优势。inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。对于短小的代码来说,inline可以带来一定的效率提升,而且和C时代的宏函数相比,inline更安全可靠。可是这个是以...原创 2019-08-17 14:57:53 · 171 阅读 · 0 评论 -
7 C/C++之malloc/free与new/delete的区别
new是C++运算符,而malloc则是C标准库函数。 通过new创建的东西是具有类型的,而malloc函数返回的则是void*,需要进行强制转型。 new可以自动调用对象的构造函数,而malloc不会。 new失败时会调用new_handler处理函数,而malloc失败则直接返回NULL。 delete是C++运算符,free是C标准库函数。 delete可以自动调用对象的析构函数,...原创 2019-08-17 18:52:57 · 146 阅读 · 0 评论 -
8 C/C++之内存分区
一个程序要运行,就必须先将可执行的程序加载到计算机内存里,程序加载完毕后,就可以形成一个运行空间,并如图所示的那样进行布局。 代码区存放的是程序的执行代码;数据区存放的是全局数据、常量、静态变量等;堆区存放的则是动态内存,供程序随机申请使用;而栈区则存放着程序中所用到的局部数据。其中...原创 2019-08-17 21:54:16 · 220 阅读 · 0 评论 -
9 C/C++之面向对象技术的基本概念
对象、类和继承。原创 2019-08-17 23:03:44 · 108 阅读 · 0 评论 -
10 C/C++之多态
关手机、关电脑、关电视。在这里的“关”就是多态!多态性可以简单地概括为“一个接口,多种方法”,在程序运行的过程中才决定调用的函数。多态性是面向对象编程领域的核心概念。多态(Polymorphisn)顾名思义就是“多种形状”。多态性是允许你将父对象设置成为和它的一个或更多的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单地说就是一句话,允许将子类类...原创 2019-08-17 23:17:22 · 173 阅读 · 0 评论 -
11 C/C++之重载和覆盖的区别
虚函数总是在派生类中被改写,这种改写被称为“override”(覆盖)。override是指派生类重写基类的虚函数。重写的函数必须有一致的参数表和返回值(C++标准允许返回值不同的情况,但是很少有编译器支持这个特性)。overload(重载)是指编写一个与已有函数同名但是参数表不同的函数。重载不是一种面向对象的编程,而只是一种语法规则,重载与多态没有什么直接关系。-------C/C+...原创 2019-08-18 00:01:17 · 316 阅读 · 0 评论 -
12 C/C++之堆与栈
管理方式不同对于栈来讲,它是由编译器自动管理的,无须手工控制;对于堆来说,它的释放工作由程序员控制,容易产生memory leak。空间大小不同一般来讲在32位系统下,堆内存可以达到4GB的空间,从这个角度来看堆内存几乎是没有什么限制的。但是对于栈来讲,一般都是有一定空间大小的。碎片问题对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而产生大量的碎片,使程序效率降...原创 2019-08-18 10:54:23 · 123 阅读 · 0 评论 -
13 C/C++之指针和引用的区别
1)非空区别在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把该变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针要高。2)合法性...原创 2019-08-18 13:12:48 · 95 阅读 · 0 评论 -
14 C/C++之STL
标准模板库(STL,Standard Template Library)。其优点:可以方便,容易地实现搜索数据或对数据排序等一系列的算法。 调试程序时更加安全和方便。 即使是人们用STL在UNIX平台下写的代码,也可以很容易地理解(因为STL是跨平台的)。-------C/C++知识持续发布中,如果能学到一点点知识,请收藏关注,共同学习进步--------------------...原创 2019-08-18 13:22:12 · 201 阅读 · 0 评论 -
4 C/C++之const用途
在C程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值。在C++程序中,它还可以修饰函数的定义体,定义类中某个成员函数为恒态函数,即不改变类中的数据成员。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。-------C/C++知识持续发布中,如果能学到一点点知识,请收藏关注,共同学习进步--------------------...原创 2019-08-17 12:02:23 · 97 阅读 · 0 评论 -
3 C/C++之头文件中的ifndef/define/endif的作用
防止该头文件被重复引用。-------C/C++知识持续发布中,如果能学到一点点知识,请收藏关注,共同学习进步--------------------原创 2019-08-17 11:45:46 · 284 阅读 · 0 评论 -
2 C/C++之extern "C"
在C++程序中调用被C编译器编译后的函数,为什么要加extern “C”?C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为void func(int a, int b)。该函数被C编译器编译后在库中的名字为_func,而C++编译器则会产生像_func_int_int之类的名字。C++提供了C连接交换指定符号extern "C...原创 2019-08-17 11:27:06 · 93 阅读 · 0 评论 -
Note4、const
C/C++ const限定符原创 2017-05-13 17:12:29 · 220 阅读 · 0 评论 -
15 C/C++之STL基础概念
模板(Template):类(及结构等各种数据类型和函数)的宏(macro)。正规的名称应叫做泛型(generic)。一个类的模板叫做泛型类(generic class),而一个函数的模板也自然而然地被叫做泛型函数(generic function)。STL标准模板库:一些聪明人写的一些模板,现在已成为每个人所使用的标准C++语言中的一部分。容器(Container):可容纳一些数据的模板...原创 2019-08-18 17:06:44 · 145 阅读 · 0 评论 -
16 C/C++之泛型编程
泛型编程是一种基于发现高效算法的最抽象表示的编程方法。也就是说,以算法为起点并寻找能使其工作且有效率工作的最一般的必要条件集。令人惊讶的是,很多不同的算法都需要相同的必要条件集,并且这些必要条件有多种不同的实现方式。类似的事实在数学里也可以看到。大多数不同的定理都依赖于同一套公理,并且对于同样的公理存在多种不同的模型。泛型编程假定有某些基本的法则在支配软件组件的行为,并且基于这些法则有可能设计可互...原创 2019-08-18 17:42:11 · 206 阅读 · 0 评论 -
17 C/C++之STL容器
数据结构 实现头文件 描述 向量(vector) <vector> 连续存储的元素 列表(list) <list> 由节点组成的双向链表 双队列(deque) ...原创 2019-08-18 19:01:56 · 192 阅读 · 0 评论 -
18 C/C++之面向对象系统设计的优点
良好的可复用性:开发同类项目的次数与开发新项目的时间成反比,减少重复劳动。易维护:基本上不用花太大的精力跟维护人员讲解,他们可以自己读懂源程序并修改。否则开发的系统越多,负担就越重。良好的可扩展性:以前,在向一个用结构化思想设计的庞大系统中加一个功能则必须考虑兼容前面的数据结构,理顺原来的设计思路。即使客户愿意花钱修改,作为开发人员多少都有点恐惧。在向一个用面向对象思想设计的系统中加入新功...原创 2019-08-18 19:33:15 · 387 阅读 · 0 评论 -
19 C/C++之派生类的公有继承
基类成员对其对象的可见性与一般类对其对象的可见性相同,公有成员可见,其他成员不可见。这里保护成员与私有成员相同。基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员可见,基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态;基类的私有成员不可见,基类的私有成员仍然是私有的,派生类不可访问基类中的私有成员。基类成员对派生类对象的可见性对派生类对象来说,基类的公有成员是可...原创 2019-08-18 21:09:03 · 625 阅读 · 0 评论 -
20 C/C++之继承优缺点
优点:1)代码重用,减少创建类的成本,每个子类都拥有父类的方法和属性;2)子类与父类基本相似,但又与父类有所区别;3)提高代码的可扩展性。缺点:1)继承时侵入性的,只要继承就必须拥有父类的所有属性和方法;2)可能造成子类代码冗余、灵活性降低,因为子类必须拥有父类的属性和方法。事物总是具有两面性,如何权衡利与弊是需要根据具体情况来做出选择并加以处理。-------C/...原创 2019-08-18 22:39:13 · 2834 阅读 · 0 评论 -
21 C/C++之派生类的私有继承
基类成员对其对象的可见性与一般类对其对象的可见性相同,公有成员可见,其他成员不可见。基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员是可见的,基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问;基类的私有成员是不可见的,派生类不可访问基类中的私有成员。基类成员对派生类对象的可见性对派生类对象来说,基类的所有成员都是不可见的。所以,在私有继承时...原创 2019-08-19 22:49:07 · 1159 阅读 · 0 评论 -
22 C/C++之派生类的保护继承
这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言。基类成员对其对象的可见性与一般类对其对象的可见性相同,公有成员可见,其他成员不可见。基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成语是可见的,基类的公有成员和保护成员都作为派生类的保护成员,并且不能被这个派生类的子类所访问;基类的私有成员是不可见的,派生类不可访问基类中的私有成员。基类成员对派生类对象的...原创 2019-08-19 23:07:53 · 526 阅读 · 0 评论 -
23 C/C++之static的作用
函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值。 在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外其他函数访问。 在模块内的static函数只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内。 在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝。...原创 2019-08-24 21:26:09 · 137 阅读 · 0 评论 -
强大的c/c++框架和库——强烈推荐
框架Apache C++ Standard Library : 是一系列算法,容器,迭代器和其他基本组件的集合ASL : Adobe源代码库提供了同行的评审和可移植的C++源代码库。Boost : 大量通用C++库的集合。BDE : 来自于彭博资讯实验室的开发环境。Cinder : 提供专业品质创造性编码的开源开发社区。Bxxomfort : 轻量级的,只包含头文件的库,将...转载 2019-10-09 15:33:50 · 1221 阅读 · 1 评论 -
1 C/C++之C与C++的关系
C语言是面向过程语言,而C++是面向对象语言。C和C++可以说是所有编程语言中关系最为紧密的两个。在目标上,C++被定位为“a better C”;在名称上,C++有一个乳名叫做“C with classes”;在语法上,C更是C++的一个子集,C++几乎支持C语言的全部功能。-------C/C++知识持续发布中,如果能学到一点点知识,请收藏关注,共同学习进步--------------...原创 2019-08-16 23:59:57 · 252 阅读 · 0 评论 -
久别重逢的 std::bad_alloc
久别重逢是说,自从在教科书上见过它一面之后,这才是第二次碰面。也就是说,在这些年的编程经历中,从来没有遇到过吧——至少在我印象中是这样的。以至于我都开始怀疑在“平常的”程序中,它是否真正存在了。内存分配,C 里的 malloc (或者配套的函数) ,如果分配失败了会返回地址 0 ,所以,“作为良好的编程习惯,每次申请内存之后,应该检查一下返回值是不是 NULL ”,这样的“良好习惯”也许刚开始写几转载 2013-09-13 11:32:42 · 962 阅读 · 0 评论