上一页 1 ··· 34 35 36 37 38 39 40 41 42 ··· 58 下一页
  2013年12月7日
摘要: const可以放在成员方法的三个地方,前、中、后。首先考虑在中间:1、const修饰形参,表示形参是否为const2、如果const修饰引用(指针指向的对象),可以进行过载,如果不是修饰引用(指针指向的对象),不能进行过载。为什么? 首先考虑引用,引用是一个对象的别名,在调用的时候,编译器根据原对象的常量性,可以找到一个最匹配的方法。const修饰指针指向的对象,和引用是同样的道理。如果const不是修饰引用或者指针指向的对象,就不能过载。因为,这种情况下,是整体拷贝,拷贝后的对象和原对象没有了任何关系。指针本身的常量性,不能过载,也是同样道理。3、考虑下面的情况,有方法 void SetA. 阅读全文
posted @ 2013-12-07 22:13 Andy Niu 阅读(856) 评论(0) 推荐(0)
摘要: 1、在可用可不用C++的地方,由于C++的难,会慢慢淘汰C++,因此C++会慢慢趋向于精英化,有些地方,目前还是必须使用C++。2、学习热门的东西,并不一定好。热门的东西必定大众化,虽然需求很大,但是学习的人也很多。C++难,使用的项目少,需求少。坚持下来的人少,相对而言,还是一样。3、基础往往是最重要的,基础学好,想上学很快。反过来,就很慢。 阅读全文
posted @ 2013-12-07 21:25 Andy Niu 阅读(227) 评论(0) 推荐(0)
摘要: 软件开发的难,往往不是做不到,而是复杂。比如:让一个建筑工人找一个原子弹,这是属于做不到的“难”。让他造一座房子,属于复杂,耗时耗精力的“难”,并不是做不到。这里还涉及到一个问题,复杂的东西能够做到,还要做的质量好。质量好的房子和质量差的房子,往往从表面看不出来。比如,好的房子电线出现问题,很快定位修好,如果很差的房子,电线出现问题,根本摸不着头脑,必须把墙全部砸开,看看里面的线路布置。 阅读全文
posted @ 2013-12-07 21:18 Andy Niu 阅读(292) 评论(0) 推荐(0)
摘要: 软件的本质是什么,该如何理解?1、所有的软件,无非是增删改查和数据的可视化。Google也就是做了一个查,只不过查的对象是整个互联网内容,互联网上的用户进行增删改操作。阿里巴巴也就是对商品的增删改查。2、软件的本质是,根据已知的实现,对这些实现封装,对外暴露接口。操作系统对硬件封装,对外暴露接口。高级编程语言对操作系统进行封装,对外暴露接口。引用软件对高级语言封装,对外暴露接口,很多是人机接口。3、可以把软件的运行看成做一件事,比如做菜。做菜需要菜谱,菜谱列出了需要哪些原料和操作步骤,人按照操作步骤,加工数据。菜谱就是程序,原料就是数据,操作步骤就是程序的控制流程,人就是CPU,人做菜就是CP 阅读全文
posted @ 2013-12-07 21:08 Andy Niu 阅读(256) 评论(0) 推荐(0)
摘要: 为什么要设计出模板,他解决什么问题?1、首先考虑类模板: 考虑下面的需求:工厂生产玩具,根据模具生产出玩具。现实当中的模具生产出来的玩具都是一样的,假设我们的模具比较高级,能够设置玩具的属性,生产出不一样的玩具。比如玩具狗,可以生出不一样的玩具狗,但是这些狗有一组相同的属性,比如大小,颜色,形状等,这些属性可能不同。如果没有设置玩具狗的属性,会有一个默认值。这里的狗模具就是类,生产出的玩具狗,就是对象,或者说实例。 接着思考,工厂扩大,需要生产玩具猫,玩具猴,怎么办?首先要做的就是,先造出猫模具,猴模具,有没有更好的办法呢? 比如说,先搞出一个生产模具的模具,这样的话,只要告诉我,生产某... 阅读全文
posted @ 2013-12-07 20:57 Andy Niu 阅读(230) 评论(0) 推荐(0)
  2013年12月2日
摘要: 什么是引用计数?一个在堆上创建的对象,记录有多少个指针指向它。为什么要设计引用计数,他解决什么问题?1、new出一个临时对象,使用完了,需要delete。但是拥有权会转移(auto_ptr)或者扩散,因此很难确定delete时机。忘记delete导致资源泄漏,过早delete,导致还在使用的指针出现错误,重复delete导致未定义行为。2、许多对象拥有相同的值,存储多次是个很愚蠢的事,可以共享。如何实现:1、以String为例说明,String s1 = "Hello", String s2 = s1; 可以让s1,s2共享"Hello"。2、引用计数放 阅读全文
posted @ 2013-12-02 20:45 Andy Niu 阅读(1375) 评论(0) 推荐(0)
摘要: 1、学习C++的过程,经常发现C++不支持一些东西,思考下,为什么?2、C++不支持一些东西,有两个原因: a、可以做到,但是会导致一些不合理的结果,这些结果往往与程序员的期望不一致。 b、属于“臣妾做不到啊”3、对于第一种情况,比如: a、传引用,存在隐式类型转换,会建立一个临时对象。对引用的修改,不能体现在原对象身上,与程序员期望不一致,C++不支持。 b、p++++,编译器不支持。4、对于第二种情况,比如: C++不支持模版的分离式编译。5、C++能做什么,不能做什么,往往是由C++编译器决定的。C++做不到,往往是因为编译器做不到。比如: a、比如,不能这样创建对象Pers... 阅读全文
posted @ 2013-12-02 19:44 Andy Niu 阅读(280) 评论(0) 推荐(0)
摘要: 1、C++不支持模版的分离式编译,为什么? C++是分别,单独编译,对于每个cpp文件,预编译为编译单元,这个编译单元是自包含文件,编译的时候,不需要其他的文件,编译好了,生成obj文件,然后连接成exe文件。在编译的时候,使用一个东西,如果这个东西就在当前位置,当然好了。如果不再当前位置,也没关系,只要说,我有这个东西就行,这个东西在其他地方。在连接的时候,会找到这个东西在什么地方。 考虑普通方法,通过上面的分析,是没有问题的。考虑模版方法: Fun.h声明一个方法模版,Fun.cpp包含Fun.h,并定义了方法模版,main.cpp包含Fun.h,然后使用方法。单独编译Fun.cpp... 阅读全文
posted @ 2013-12-02 19:34 Andy Niu 阅读(1357) 评论(0) 推荐(0)
摘要: 1、为什么要进行方法名重整? C++支持过载,允许方法名相同,形参表不同。对于同名的方法,编译器根据形参表的不同,对方法名重整为另一个方法名,也就是建立一种映射。这就是为什么要进行方法名重整。同时编译器,进行了扩展,也就是说,没有过载的方法也进行了方法名重整。2、方法名重整带来的问题 C中没有过载的概念,也就是不允许出现同名的方法。因此,也就没有方法名重整。考虑下面的情况:在C++使用C语言库中的方法,int add(int a);C中提供了add方法的实现,C++中包含头文件,声明方法,然后使用。C代码生成的目标文件中,方法名没有重整,还是add,而C++代码方法名进行了重整,假设重整为.. 阅读全文
posted @ 2013-12-02 19:01 Andy Niu 阅读(261) 评论(0) 推荐(0)
摘要: 1、考虑下面的场景:有一个Person类,内部有个age字段,对外提供前缀式和后缀式,把年龄加1。2、前缀式与后缀式都没有右操作数,也就是说没有形参,需要区分前缀式和后缀式,对于后缀式中增加一个形参。因为这个形参在方法内并不使用,可以省略形参名。3、前缀式和后缀式是操作符重载,本质上是方法,和GetName()一样。4、前缀式:1 Person& Person::operator ++()2 {3 this->age = this->age+1;4 return *this;5 }5、后缀式:1 const Person Person::operator ++(int)2 阅读全文
posted @ 2013-12-02 18:29 Andy Niu 阅读(3501) 评论(0) 推荐(0)
上一页 1 ··· 34 35 36 37 38 39 40 41 42 ··· 58 下一页