警惕!C++里面“=”不一定就是等于(赋值)。
C++ 初始化HasPtr b = a;调用复制构造函数,而非赋值运算符。文章通过代码实例,揭示了这一易混淆点及其导致的内存问题。
C++ 初始化HasPtr b = a;调用复制构造函数,而非赋值运算符。文章通过代码实例,揭示了这一易混淆点及其导致的内存问题。
不知不觉我都写了6讲了,的确这样讲出来的学习才能迫使我真的去调试每个书上出现的代码,去想些自己能讲出什么新的书上没有的东西,这才是真的学习吧,以前看完书,做道题式的就以为自己基本都掌握了,在类这里好像行不通,因为我的C基础不适合这里。。。。呵呵不说题外话了。这次讲析构函数,相对于构造函数。析构函数就是在类的声明周期结束的时候运行的函数,一般用来把一个类的资源释放出来的家伙。就我了解,JAVA好像不需要这样的工作,他们有垃圾回收器,我看一个比较理性的程序员评价这种情况是有利有弊,类似的简化让JAVA成为了最佳商业模式开发软件,但是让JAVA程序员太脱离底层,让他们的知识匮乏,因为编JAVA不需要那么多知识,而且让JAVA失去了很多底层应用。另外这样的垃圾回收是耗资源的,当时Bjarne Strooustrup就考虑过也给C++加一个这样的特性,但他又说,作为一个系统开发级及常用来开发驱动程序的语言,他无法接受那样的效率损失。所以最后C++没有加上这个特性。又讲多了,看析构函数吧。
还记得(1)中讲到的构造函数吗?复习一下,这次我们重载一个新的默认构造函数–即当你不给出初始值时调用的构造函数,我记得我讲过这个概念吧,有吗?看下面的例子。
呵呵,又来了,自从我开始尝试描述类以来,我发现我自己是开始真的了解类了,虽然还不到就明白什么叫oo的高深境界,起码对于类的使用方法了解的更多了,希望你看了以后也能有所进步啊:)
C++单参数构造函数能将其他类型隐式转为类对象。文章讲解了此机制及如何用explicit关键字禁用它,以防止误用。
这一次讲我一直没有怎么搞明白的两个特殊类成员,mutable,static。 接着第(1)次的内容,从水果讲起。我们希望有一个成员总是可以被修改,即mutable。哪怕他是const成员函数都可以修改,这种需要感觉还是比较少有。不过我们可以看看例子。
上一次讲了一些基本的概念,这次分析一个稍微复杂但其实还是很简单的例子。现看定义:
类多么重要我就不多说了,只讲讲学习,因为个人认为类的学习无论从概念的理解还是实际代码的编写相对其他C兼容向的代码都是比较有难度的, 对于以前学C 的人来说这才是真正的新概念和内容,STL其实还比较好理解,不就是一个更大的函数库和代码可以使用嘛。虽然vector,string就是类,不过我们却不需要这样去理解他们,就可以很好的使用了。
先说明,1,这是非常初级的东西。2,你懂了就不需要看了。3,我写出来是帮助还不懂得人。4,我自己也还不太懂,所以才写下来,梳理一下,希望自己能更好的理解,因为我相信一句话,很好的理解一个东西的好方法是把这个东西教给别人。有什么不对的地方,欢迎指出,我非常感谢,还有很多时候,某种方法是不允许的,了解也很重要,但我不想给出错误的例子,那样很容易给出误导,只讲这样是错误的,希望你可以自己输入去尝试一下,看看得出的是什么错误。
C++ Primer中这样描述reverse 反向排列元素
一个容器为 9,8,7,6,5,4,3,2,1,0,sort后为0,1,2,3,4,5,6,7,8,9。
一个容器为0,1,2,3,4,5,6,7,8,9,sort后还为0,1,2,3,4,5,6,7,8,9。
假设一个容器为0,1,2,3,4,5,6,7,8,9你认为reverse以后为什么呢?没有错,9,8,7,6,5,4,3,2,1,0。
但是一个容器本来就为 9,8,7,6,5,4,3,2,1,0呢?还是9,8,7,6,5,4,3,2,1,0吗?他们不是本来就降序排列了吗?
我以前就是这样理解的,不过实际使用才知道reverse不时排序算法,仅仅是反向排列。9,8,7,6,5,4,3,2,1,0
reverse后变成0,1,2,3,4,5,6,7,8,9。要得到降序排列的方法,好像可以先sort,后reverse.不知道我说的对不对。
具体的验证代码就很简单,不列出来了。
本文通过代码示例说明,C++的std::merge算法要求输入序列必须先排好序,才能正确合并成有序序列。