上一页 1 ··· 31 32 33 34 35 36 37 38 39 ··· 58 下一页
  2014年1月3日
摘要: int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释。缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀,告诉编译器按照不同进制去解释。8进制(oct)---前缀加0,16进制(hex)---前缀加0x或者0X。string前后加上双引号,告诉编译器把它当成一串字符来解释。注意:对于字符,需要区分字符和字符表示的数值。比如:chara = 8;charb = '8',a表示第8个字符,b表示字符8,是第56个字符。int转化为string1、使用itoa(int to string) 1 //char *itoa( in 阅读全文
posted @ 2014-01-03 19:29 Andy Niu 阅读(336061) 评论(5) 推荐(8)
  2014年1月2日
摘要: 1、什么是宏,它解决什么问题? 宏的本质是文本替换,考虑下面的需求,程序中多次使用圆周率Pi,在每个地方都使用3.1415,显然很愚蠢。有没有好的办法呢?使用宏,如下: #definePi 3.1415 这样,编译器在程序中遇到Pi,就使用3.1415来进行文本替换。2、特殊字符 考虑下面的需求,程序中多处使用文本字符串。我们知道文本字符串前后都要加上双引号,我很讨厌输入双引号。有没有好的办法呢?根据常识,使用下面的宏: #define Str(x) "x" String s = Str(Hello); 期望预编译为:String s = "Hello" 阅读全文
posted @ 2014-01-02 21:53 Andy Niu 阅读(2134) 评论(0) 推荐(0)
摘要: 1、public继承表示Is-A关系,也就是满足里氏代换。与之相对应的,private继承表示根据某物实现出,不满足里氏代换。子类对象初始化父类引用,编译通不过。2、考虑下面的需求,企鹅继承鸟,Bird暴露virtual Fly接口。现在出问题了,因为Penguin不会飞,不提供Fly接口。怎么办? a、Penguin在重写的Fly方法中,抛出一个异常。 b、上面的解决办法不好,因为它表示的意义不是说Penguin不会飞,而是说尝试让Penguin飞,会出现错误。最大的问题是:运行期才发现错误。我们知道:好的接口可以防止无效的代码通过编译。现在思考,解决解决这个问题。这个问题的关键是:并不.. 阅读全文
posted @ 2014-01-02 21:02 Andy Niu 阅读(383) 评论(0) 推荐(0)
  2013年12月31日
摘要: 1、令operator= 返回一个reference to *this,为什么? 这只是一个协议,并无强制性。但是,为了与基本类型的行为保持一致性,强烈建议这么做。设计class 有一个宝典:一旦有疑惑,请参考int类型的行为,并遵循之。2、不光operator=,与它类似的赋值相关运算,也应该遵循该协议。 阅读全文
posted @ 2013-12-31 19:40 Andy Niu 阅读(216) 评论(0) 推荐(0)
摘要: 1、接口继承和实现继承表示的意义 接口继承:父类提供的接口,子类仍然提供。 实现继承:子类复用父类的代码实现。2、子类继承父类,可分为下列情况: a、继承接口,继承实现---对应non-virtual方法。 b、继承接口,继承缺省实现,允许子类修改实现---对应virtual方法。 c、只继承接口---对应pure virtual方法,父类只提供接口,强制子类提供实现。 b、关闭接口,继承实现:private继承,表示根据某物实现出,子类关闭接口。3、现在,考虑下面的场景:父类有个virtual方法XXX(),目的是让子类继承缺省实现,允许子类修改。现在有个子类,应该重写XXX,但... 阅读全文
posted @ 2013-12-31 19:20 Andy Niu 阅读(461) 评论(0) 推荐(0)
摘要: 1、首先讲讲作用域,内层作用域的名称会遮掩外层作用域相同的名称。而且遮掩规则是:只看名称,不关心名称的类型。也就是说,内层double类型的x会遮掩外层int类型的x。2、继承有两层含义:从行为和状态看,子类更加具体化;从范围看,父类是大范围,子类是小范围,可以认为子类作用域嵌套在父类作用域中。3、那么问题来了,子类作用域嵌套在父类作用域中,根据上面的遮掩规则,子类名称会遮掩父类的名称,不关心名称的类型。4、这也就意味着,子类不能过载父类的方法,因为会遮掩。如果确实要过载父类的方法,怎么办呢? 使用using Base::XXX。明确告诉编译器,我要继承父类的XXX方法(这个XXX名称对应着. 阅读全文
posted @ 2013-12-31 18:30 Andy Niu 阅读(364) 评论(0) 推荐(0)
  2013年12月27日
摘要: 1、Bug描述 使用boost串口编程,main方法调用异步read,传入回调方法,运行程序,出现 “串口读取位置...时发生访问冲突”。而在main方法中,使用串行,while(true){read, write ,} 不会报错。2、最后问题,终于找到了。使用同步方法,main方法不会退出,而使用异步方法,main方法退出,这个时候再去执行 回调方法的时候,当然会报错,main方法都退出了。3、解决办法:使用异步方法的时候,main方法使用while(true){sleep;} 紧接思考,如果main方法不再做其他事,直接使用同步方法就好了。因为异步方法的使用场景是:去让别人做一件事(别人. 阅读全文
posted @ 2013-12-27 20:03 Andy Niu 阅读(575) 评论(0) 推荐(0)
摘要: 1、C++代码提供Python需要的接口: 1 #include "stdafx.h" 2 #include 3 #include 4 using namespace std; 5 6 string greet() 7 { 8 for(int i=0;i>> import hello4 >>> hello.greet()5 'hello'6 >>> 阅读全文
posted @ 2013-12-27 19:33 Andy Niu 阅读(442) 评论(0) 推荐(0)
摘要: 1、由于【36】绝不重新定义继承而来的non-virtual方法,现只考虑带有缺省参数值的virtual方法。2、为什么绝不重新定义继承而来的缺省参数值? 缺省参数值是静态绑定,virtual方法是动态绑定。现在考虑父类virtual方法带有缺省参数值,子类重写了virtual方法,父类指针指向子类对象,调用virtual方法,导致的结果是:用父类的缺省参数值初始化形参,调用子类重写的方法实现。这肯定不是程序员预期的结果。3、怎么解决这个问题? 使用NVI,父类通过non-virtual方法调用virtual方法,父类non-virtual方法使用缺省参数值,父类virtrual方法不使用.. 阅读全文
posted @ 2013-12-27 19:01 Andy Niu 阅读(414) 评论(0) 推荐(0)
摘要: 1、绝不重新定义继承而来的non-virtual方法,为什么? 首先想想,non-virtual方法是干什么的?也就是说,它的使用场景。父类的non-virtual方法,其实就是告诉子类,继承实现,子类决定是否继承接口(也就是子类决定是否继续提供接口)。如果重新定义了non-virtual方法,就不符合它的使用场景。2、如果想重新定义继承而来的方法,应该把父类方法修改为virtual方法,因为virtual方法的使用场景是:父类告诉子类,继承接口,修改实现。3、如果重新定义了继承而来的non-virtual方法,会出现什么问题呢? 因为non-virtual方法是静态绑定,也就是说,调用n.. 阅读全文
posted @ 2013-12-27 18:42 Andy Niu 阅读(348) 评论(0) 推荐(0)
上一页 1 ··· 31 32 33 34 35 36 37 38 39 ··· 58 下一页