![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面向对象
originalcandy
有问题可留言或发邮件到originalcandy@163.com
展开
-
多态的简单实现
参考《C++编程思想》第2版_第1卷。多态基于迟绑定,表现形式是继承和虚函数。程序运行时,当向上类型转换为父类类型后,C++根据对象的地址来确定应该执行父类函数还是子类的函数。上述“转换”是名义上的转换,其实际地址还是原类型,若将void ShowWhoDo(A &aa)中&删除,则无法体现多态。class A{public: virtual void Do() { cout原创 2017-12-14 22:29:19 · 187 阅读 · 0 评论 -
C++多继承的局限
类似以下代码无法通过编译,C++不允许不同父类中有同名函数。不管函数的参数及返回值是否相同,子类中必须重新实现。class A{public: void Do(int i) { cout << "Do By A;" << endl; }};class B{public: void Do() { cout << "Do By B;" << endl; }};原创 2017-12-14 22:14:38 · 408 阅读 · 0 评论 -
抽象类的继承/纯虚函数的实现
纯虚函数是指类似 virtual void Do()=0 的函数,含有纯虚函数的类是抽象类,不能实例化对象,其子类需实现所有纯虚函数方能实例化对象。以上面向对象的规则读者应该都比较清楚,但有个问题大多数教程都没有信息说明。若class A有2个虚函数Do1、Do2;class B继承自A,实现了Do1;class C继承自B,实现了Do2。那么请问C能不能实例化对象?答案是可以。可以这样考原创 2017-12-14 21:33:05 · 1462 阅读 · 1 评论 -
适配器模式的极简概述
刚简单并认真地看了适配器模式,赶紧把其原理勾勒出来,防止忘光光。若A的Do无法直接使用C的方法DoC,构件适配器B。注意以下要点:1.B继承自A,写覆盖函数Do(目的是调用B的方法);2.B以C的对象c为构造函数的输入;3.B的Do函数中使c调用DoC;4.C c = new C;A a = new B(c);a->Do;此时,执行的是B的Do,从而调用了DoC。给出...原创 2017-12-07 16:00:19 · 172 阅读 · 0 评论