#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;