c++
_Madrid
华而无实
展开
-
C++——对象构造顺序
程序里不可能只有一个对象,我们的程序里处处都是对象,那么对象的构造顺序是怎么样的呢。 还是按照在内存四区上的分布来分开说,此处不在说代码段。 如果对象是在栈上分配的,那么肯定是在函数中创建的,只要main函数开始执行,就有了程序执行流,所以分配在栈上的对象的构造顺序是按照顺序执行流和对象的定义语句来确定先后顺序的。 如果对象在分配在堆上的,那么我们值需要跟着程序执行流找到new出现的先后顺序原创 2017-11-12 10:54:32 · 462 阅读 · 0 评论 -
C++——静态成员
学习了一些累得基础知识,知道了,在类的作用域外要通过类去实例化对象,然后访问里面的成员。 思考一下,如何去实现一个统计类对象个数的程序设计呢,最笨的办法我们可以在类里加一个方法,进行自加,然后初始化对象后就调用这个方法。这个可以实现一大部分需求。然后说这个的不足,如果我们没有对象,应该怎么去调用那个方法返回一个0值呢?还有如果我们的对象个数不为0,我们每次都需要手工调用,就如同我们当时想着自己初原创 2017-11-14 22:32:57 · 124 阅读 · 0 评论 -
C++——类型转换
c语言里的基础类型,char,short,int,uint,long.ulong,float,double,他们在表达式里是有隐式类型的转换,做运算时,默认转换为右值的最大类型,然后运算,得出结果后强转为左值的类型赋值给左值,期间char,short一定是先转换为int类型,而且基础类型里无符号大于有符号。C++里也满足这样的关系,但是现在有类了,类和基础数据类型怎么进行转换呢。 如果基础数据类原创 2017-11-19 16:16:30 · 204 阅读 · 0 评论 -
C++——逻辑操作符的危险
C++的逻辑操作符我们在C语言里就一直用,从来没遇到过什么危险的事,因为一直是按照想法执行的。为什么会有危险。因为C++里操作符的重载。先来了解一下前提。 1操作符的重载的本质是函数的调用。 2逻辑操作符从做往右执行,满足短路规则,即不用计算完就可能得到结果。 这里所说的逻辑操作符就是因为操作符的重载出现的。我们通过一个例子说明。 class Test { int mValue;原创 2017-11-18 19:03:27 · 235 阅读 · 0 评论 -
C++——智能指针
这里所说的都不是STL里的东西,只是简单的模仿一下。 程序里一般我们将一些常用的,不是临时的对象放在堆上,堆的空间是比较大的。但是如果我们只是不停的动态申请但是忘记在不使用的时候归还就会造成内存泄露。有时候我们也会因为同一块内存空间被多个指针指向,在释放时造成多次释放的问题。为了避免这些,所以我们试着来创建一个特殊的指针。 1在生命周期结束的时候直接释放掉堆里的内存空间 2且这个指针指向的内原创 2017-11-17 19:36:18 · 224 阅读 · 0 评论 -
C++——函数对象
函数对象其实就是一个类的成员函数重载了()操作符,我们就可以使用varName(......)的方式调用一段函数。 那么我们为什么需要用函数对象来调用函数呢? 1函数对象可以根据不同的构造方法生成初始状态不同的函数。 2函数对象可以在类里面有自己的成员变量,这个成员变量可以记录当前函数的状态。 3参数列表传入函数对象比指针更加安全。 这里的状态的优势可以使用普通函数和局部的静态变量,但原创 2017-11-17 17:27:52 · 267 阅读 · 0 评论 -
C++——临时对象
class Test { int t; public: Test() { Test(0); } Test(int rec) { t = rec; } int getVal(); }; int Test::getVal() { return t; } 这个程序,比较简单,说一下产生问题的原创 2017-11-13 17:31:09 · 194 阅读 · 0 评论 -
C++——析构函数
前面我们知道一个对象创建后,需要自动调用构造函数去进行初始化,避免我们操作时引出问题。那么今天有一个类似的问题,就是当一个对象不再需要时,它会占着一些操作系统的资源,比如一直占着内存,慢慢我们的内存就不足了,所以看的出来,当一个对象不再需要时我们需要释放这个对象占用的系统资源,比如释放内存,关闭文件和端口的使用权。 我们可以在public的访问权限处添加一个一个free函数,去做一些处理上述问题原创 2017-11-13 14:13:04 · 161 阅读 · 0 评论 -
C++——类的基础知识
类通常包括两部分:类的内部实现和类的使用方式。当我们创建一个类时,我们需要考虑去怎么实现,使用的时候不需要考虑细节,不用想怎么去实现。 首先我们给出一个简单的类 class Test { public: Test() { v = 0; } int getVal(); private: int v; }; int Test::get原创 2017-11-11 21:09:53 · 229 阅读 · 0 评论 -
C++——构造函数
首先问一下自己,为什么有构造函数呢? 我们在类里定义了成员变量,但是只是定义了,我们却并没有初始化,那么当使用类定义一个对象的时候它的成员变量的值都是些什么呢?程序里有内存四区,除去代码段,还有三个位置,栈,堆,数据区(包括常量区和静态/全局区),凭借在C语言里的经验知道堆和栈上的变量值是随机的,数据区的是0,对象也是变量,所以符合规则,那我们定义了对象后成员变量的值是不确定的,那么我们的成员方原创 2017-11-11 22:13:41 · 175 阅读 · 0 评论 -
C++——操作符重载
我们知道c++里的函数重载,那么操作符是不是也可以重载呢,?既然说出来肯定是有的。操作符重载有什么意义呢。比如我们定义一个复数类,让对象可以互相进行加减乘除。原生的加减乘除是不支持我们这么操作的,所以我们需要让这个操作符支持,让这个操作符实现重载,基础类型还是原生意思,我们说的复数类就用承载的操作符的操作。 操作符的重载其实是一个函数实现的,本质也是去找到匹配的函数进行调用函数。成员函数和全局函原创 2017-11-15 22:58:26 · 171 阅读 · 0 评论