13.6.2 新添加一种技术(Adding One Technologry) 简单

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

  

原文地址:https://www.cnblogs.com/xiangxiaodong/p/2357765.html