#include "createsony.h" #include "sony.h" enum Technology{PUREFLAT,PLASMA,LIQUIDCRYSTAL,NANOMETER}; void fn(Sony* s) { Sony2 * ps2 = dynamic_cast<Sony2*>(s); //增加 if(ps2) ps2->adjustLight(); //否则不用 ps2->adjustVolume(); ps2->switchChannel(); } void createSonyObject(CreateSony* sp) { Sony* s29 = createSonyInch29(sp); fn(s29); delete s29; } #include <iostream> using namespace std; int main() { if(CreateSony* sp = createCreateSony(NANOMETER)){ createSonyObject(sp); delete(sp); } system("pause"); return 0; }
#ifndef HEADER_NANOMETER #define HEADER_NANOMETER #include <iostream> class Nanometer { public: virtual void drawgraph(){ std::cout<<"Nanometer\n";} virtual void specialForNanometer(){ std::cout<<"SpecialForNanometer\n";} ~Nanometer(){} }; #endif;
#ifndef HEADER_NANOMETERCREATE #define HEADER_NANOMETERCREATE #include "createsony.h" class NanometerCreate : public CreateSony { Sony* createInch29(); //创建C29对象 Sony* createInch34(); //创建C34对象 ~NanometerCreate(){} }; #endif; #include "nanometercreate.h" #include "d29.h" #include "d34.h" Sony* NanometerCreate::createInch29() { return new D29(); } Sony* NanometerCreate::createInch34() { return new D34(); } CreateSony* createNanmeter(){ return new NanometerCreate(); }
#ifndef HEADER_D29 #define HEADER_D29 #include "inch29.h" #include "nanometer.h" #include <iostream> class D29 : public Inch29, protected Nanometer { public: void adjustVolume(){ std::cout<<"纳米技术_液晶电视29英寸 Pureflat29 AdjustVolume\n"; } void switchChannel(){ std::cout<<"纳米技术_液晶电视29英寸 Pureflat29 SwitchChannel\n";} //void adjustLight(){ std::cout<<"液晶电视29英寸_新添加调整亮度功能";} void adjustLight(){ std::cout<<"纳米技术_调节音量_液晶电视29英寸\n";} ~D29(){} }; #endif; #ifndef HEADER_D34 #define HEADER_D34 #include "inch34.h" #include "nanometer.h" #include <iostream> class D34 : public Inch34, protected Nanometer { public: void adjustVolume(){ std::cout<<"纳米技术_液晶电视34英寸 Pureflat34 AdjustVolume\n"; } void switchChannel(){ std::cout<<"纳米技术_液晶子电视34英寸 Pureflat34 SwitchChannel\n";} void adjustLight(){ std::cout<<"纳米技术_调节音量_液晶电视34英寸\n";} ~D34(){} }; #endif;