两个类之间的相互引用问题解决方法参考:http://blog.csdn.net/leo115/article/details/7395077
我修改后的文本查询程序代码百度云盘下载链接:http://pan.baidu.com/s/1c12RXrq 提取密码:o40c(包括我改过的文本查询程序以及动物运动会c++代码)(这里动物运动会c++代码,之前我同学写的,也可以去看看《大话设计模式》里面附录A里面的讲解以及代码)
文本查询程序:主要学习继承与多态,包装的思想模式
动物运动会:主要学习继承与多态,构造函数,拷贝用构造函数,=重载运算符。
文本查询程序 代码解读(学习继承与多态):QueryResult与TestQuery两个类,是存要查询的file以及查询单词string行号的(可以查看c++primer(5th)12章),代码最重要的是Query.h的设计,Query.h属于承上启下(上接QueryResult与TestQuery文本存储类,下启Query_base以及其派生类(Query的函数相当于包装模式(我自己说法),作用是:根据构造函数或者重载&,|,~,来给其中的基类指针赋值具体派生类,然后eval(),rep()就用某具体派生类的同名函数)。
原来的c++primer代码中的Query.h,Query.cpp里面,把query类以及Query_base以及其派生类全部掺杂在了一起,我把它分解成了query.h,query.cpp以及B.h(定义Query_base以及其派生类):这里面要解决一个问题(两个类之间的相互引用问题),因为query类用到了B类的指针,B.h用到了query类对象!可以参考http://blog.csdn.net/leo115/article/details/7395077,或者下载我改的源代码(有多处关键点我写了注释)。
动物运动会:具体不多说了,学习继承与多态经典案例。
其中拷贝用构造函数,=重载运算符的时候有一个重点,就是基类指针指向派生类对象来实现多态。有两种方法:①显式:例如动物类基类指针p1->data=new Dog(sTemp_name);②相当于“隐式”:派生类定义时,定义一个clone()函数,返回指向派生对象的基类指针。后面用到的时候,只要:p1->data=p->data->clone();(拷贝用构造函数,=重载运算符就用这个办法!!)
大家也可以可以去看看《大话设计模式》里面附录A里面的讲解以及代码。或者看我下载链接里面C++写的代码。(初学者自己实现,会很有收获)
附:文本查询程序andTestMain运行结果截图: