2013年12月23日
摘要: 1、代码复用有两个方式:继承和复合。2、继承分为public继承和private继承,public继承是继承接口,也就是父类提供的接口,子类承若仍然提供,内部有可能修改实现,子类与父类是IS-A关系。private继承是继承实现,父类提供的接口,子类不再提供,子类与父类不是IS-A的关系,不满足里氏代换,private表示的意义是,根据某物来实现。3、复合可以分为关联,聚合,组合。关联是一对一的关系,聚合和组合都是多对一的关系,但二者的紧密程度不一样。举例来说,大雁聚合成雁群,翅膀和脚组合成大雁。复合表示的意义也是,根据某物来实现。更合理的说法应该是,委托某物去做某件事。4、关联与依赖不同,关 阅读全文
posted @ 2013-12-23 19:19 Andy Niu 阅读(754) 评论(0) 推荐(0)
摘要: 1、过载:在一个类中(也就是一个作用域),方法名相同,形参表不同的方法。2、重写:父类方法使用virtual,子类方法和方法的方法名,形参表,返回类型相同,子类可以不使用virtual,但是建议使用virtual方法。3、子类和父类的方法名相同,除了重写的情况下,都是隐藏。4、为什么搞出隐藏? 隐藏的本质就是,子类对象无法调用,与子类方法同名的父类方法。这样做有什么意义呢? 首先考虑,Base有方法Say(),Derived有方法Say(int),子类对象调用方法的时候,少写了参数,比如derived.Say() 就会变成调用父类的方法,这和程序员的期望不一样。有了隐藏,编译器明确表示错误.. 阅读全文
posted @ 2013-12-23 19:04 Andy Niu 阅读(914) 评论(0) 推荐(0)
摘要: 举个最简单的例子,A向B发送一个数字,B如何检测数字在传输过程中有没有发生错误呢? A和B之间,定下一个协议,两边都知道一个除数X,A向B发送数字的时候,同时把余数附带后面发过去。比如,两边定的除数是5,A发的数字是13,那么A实际发的数据可以认为是 13&3,B接收到这个数据,知道前面是被除数,后面是余数。检查数字传输过程是否出错的办法是 (13-3)/ 5 是否整除,如果不整除,可以认为数字传输过程中,肯定出错,比如发来的数据是 11&3。只能检查部分出错的情况,比如传输过程变成18&3,不能检查出错误。 阅读全文
posted @ 2013-12-23 18:45 Andy Niu 阅读(487) 评论(0) 推荐(0)
摘要: 1、使用场景 virtual方法的使用场景:父类告诉子类,继承接口,修改实现,从而可以面向接口编程。 non-virtual方法的使用场景:父类告诉子类,继承接口和实现,从而可以代码复用。2、成员方法是一种封装技术,暴露给程序员。对于编译器而言,没有成员方法的概念,编译器会把成员方法编译为普通方法,方法的拥有者(也就是对象)转化为普通方法的形参,这个形参是const指针,名称为this,指向的类型是方法拥有者的类型。3、编译器编译的时候,只知道指针的表面类型,正是这个表面类型引导编译器去解释指向对象的大小和内容,那么问题来了? 对于non-virtual方法,子类继承接口和实现,继承的方... 阅读全文
posted @ 2013-12-23 18:25 Andy Niu 阅读(2508) 评论(0) 推荐(0)