C++学习笔记
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之
GeorgiaStar
世上无难事,只要肯放弃
展开
-
C++真的比C差吗
相信用过C++的程序员知道,C++的很多特性主要就是解决C语言中的各种不完美和缺陷:(注:C89、C99中许多的改进正是从C++中所引进的)1、用namespace解决了很C中变量与函数重名的问题;2、用const/inline/template代替了宏,解决了C语言中宏的各种坑;3、用const的类型解决了很多C语言中变量值莫名改变的问题;4、用引用代替指针,解决了C语言中指针的原创 2017-01-19 14:41:22 · 5299 阅读 · 0 评论 -
C++成员函数在内存中的存储方式
用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配存储单元,如下图所示。能否只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。如下图所示。显然,这样做会大大节约存储原创 2017-03-01 17:12:58 · 39971 阅读 · 24 评论 -
C++内联函数机制全面解析
内联函数机制的引入内联机制被引入C++作为对宏(Macro)机制的改进和补充(不是取代)。内联函数的参数传递机制与普通函数相同。但是编译器会在每处调用内联函数的地方将内联函数的内容展开。这样既避免了函数调用的开销又没有宏定义机制的缺陷。由此可见,内联函数机制的引入与宏定义有很大关系,因此,有必要先了解下宏定义有哪些缺陷。1. 由于宏定义都是直接嵌入代码中的,所以代码可能相对多一点;原创 2017-01-19 14:31:26 · 3869 阅读 · 1 评论 -
动态链接库与静态链接库的区别
大家都知道应用程序有两种链接方式,一种是静态链接,一种是动态链接,这两种链接方式各有好处。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。动态链接是相对静态链接而言的,动态链接所调用的原创 2017-01-19 15:19:47 · 10383 阅读 · 1 评论 -
什么样的对象才能作为STL容器的元素
这是在使用STL容器前必须搞清楚的一个很重要的问题!STL容器采用拷贝方式来接收待插入的元素对象——在插入的时候容器自动新建等量的元素对象,并用待插入对象依次初始化它们(调用拷贝构造函数);在删除元素时,容器负责释放其内存资源(对于采用随机存储策略的容器,如list和关联容器)或者仅仅调用元素的析构函数(对于采用连续存储策略的容器,如vector)。容器只负责其元素对象本身一级的存储分配与原创 2017-03-01 17:06:36 · 1335 阅读 · 1 评论 -
c++对象模型详解之一——《深度探索C++对象模型》
《深度探索C++对象模型》读书笔记转载 2017-02-27 13:29:33 · 492 阅读 · 0 评论 -
c++对象模型详解之二——《深度探索C++对象模型》
《深度探索C++对象模型》读书笔记转载 2017-02-27 13:32:30 · 324 阅读 · 0 评论 -
C语言中的类型转换与数据的机器码存储
各种类型的表示范围对于涉及到了混合着不同数据类型的表达式中的数据类型的转换问题。在总结转换问题之前,先说明一下32位机上的各种数据类型。类型名字节数其他类型名10进制表示范围(机器码)char1signed char-128—127(0X80-0X7F)uns原创 2017-01-19 15:24:24 · 5186 阅读 · 1 评论 -
C++关于内存与参数传递的几道思考题
经典测试代码如下:void GetMemory(char *p){ p = (char *)malloc(100); }void Test(void) //1 { char *str = NULL; GetMemory(str); strcpy(str,"hello world"); printf(str);}char *GetMemory(void){ ch原创 2017-01-19 15:22:12 · 659 阅读 · 0 评论 -
静态语言与动态语言
静态语言是指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。例如:C++、Java、Delphi、C#等。动态语言是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。例如:Python、Ruby、Perl、JavaScript等。强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经原创 2017-01-19 14:52:53 · 1160 阅读 · 0 评论 -
Java填了C++的哪些坑
学Java的时候,不知道为什么Java要设计成这样,只好回头看C++,结果学C++的时候又有很多不懂,又只得回头看C,最后发现,C -> C++ -> Java的过程,就是C++填C的坑,Java填C++的坑的过程。下面这些东西可以看到Java在填C/C++坑:1、Java彻底废弃了指针(指针这个东西,绝对让这个社会有几百亿的损失),使用引用。2、Java用GC解决了C++的各种内原创 2017-01-19 14:43:02 · 797 阅读 · 0 评论