class File { public: virtual int open(const string & filename)=0; virtual int close(const string & filename)=0; // virtual ~File()=0; // 记住添加纯虚拟析构函数(dtor) };
class DiskFile: public File { public: int open(const string & filename); // 实现其他的纯虚拟函数 ...... // 自己的专有操作 virtual int flush(); virtual int defragment(); };
class TextFile: public DiskFile { // ...... int sort_by_words(); }; class MediaFile: public DiskFile { //...... };
File *pfile; // *pfile的静态类型是 File if(some_condition) pfile = new TextFile; // 动态类型是 TextFile else pfile = new DiskFile; // 动态类型是 DiskFile
#include <typeinfo> // typeid 需要的头文件 void menu::build(const File * pfile) { if (typeid(*pfile)==typeid(TextFile)) { add_option("edit"); } else if (typeid(*pfile)==typeid(MediaFile)) { add_option("play"); } }
void menu::build(const File * pfile) { //...... else if (typeid(*pfile)==typeid(LocalizedMedia)) { add_option("play"); } }
void menu::build(const File * pfile) { if (dynamic_cast <MediaFile *> (pfile)) { // pfile 是 MediaFile 或者是MediaFile的派生类 LocalizedMedia add_option("play"); } else if (dynamic_cast <TextFile*> (pfile)) { // pfile 是 TextFile 是TextFile的派生类 add_option("edit"); } }
[1]
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18