C++抽象基类的实例化(抽象工厂模式)
来源:互联网 发布:视频底层软件开发 编辑:程序博客网 时间:2024/06/16 21:50
今天学习设计模式《抽象工厂模式》,参考了两个博客:
http://blog.csdn.net/wuzhekai1985/article/details/6660462
http://www.cnblogs.com/wanggary/archive/2011/04/13/2015288.html
然后按照第二个博客的意见,应用类模板实现工厂类;中间出现一个不能实例化抽象基类的问题,通过查资料,然后另外新建一个工程实验后知道:
1,抽象类是不能初始化的(最基本的,大家都知道的)
2,如果抽象基类的派生类有哪怕只有一个函数没有实现,这个抽象基类仍然不能实例化;即需要将抽象基类中定义的虚接口函数全部在派生类中实现(说的不太专业。。。)
代码如下:
//core.h#ifndef _CORE_H_#define _CORE_H_class Core{public:Core(){}virtual ~Core(){}virtual void NumOfCore() = 0;virtual void SpeedOfCore() = 0;virtual void VersionOfCore() = 0;};#endif
<pre name="code" class="cpp">//multicore.h#ifndef _MULTICORE_H_#define _MULTICORE_H_#include"core.h"#include<iostream>using namespace std;class MultiCore :public Core{public:MultiCore(){}~MultiCore(){}void NumOfCore(){cout << "multicore" << endl;}void SpeedOfCore(){cout << "speed fast" << endl;}virtual void VersionOfCore() = 0;};#endif
<pre name="code" class="cpp">//singlecore.h#ifndef _SINGLECORE_H_#define _SINGLECORE_H_#include"core.h"#include<iostream>using namespace std;class SingleCore :public Core{public:SingleCore(){}~SingleCore(){}void NumOfCore(){cout << "singlecore" << endl;}void SpeedOfCore(){cout << "speed slow" << endl;}virtual void VersionOfCore() = 0;};#endif
<pre name="code" class="cpp">//newmulticore.h#ifndef _NEWMULTICORE_H_#define _NEWMULTICORE_H_#include"multicore.h"class NewMultiCore :public MultiCore{public:NewMultiCore(){}~NewMultiCore(){}void VersionOfCore(){cout << "new multi version core" << endl;}};#endif
<pre name="code" class="cpp">//newsinglecore.h#ifndef _NEWSINGLECORE_H_#define _NEWSINGLECORE_H_#include"singlecore.h"class NewSingleCore :public SingleCore{public:NewSingleCore(){}~NewSingleCore(){}void VersionOfCore(){cout << "new single version core" << endl;}};#endif
<pre name="code" class="cpp">//oldmulticore.h#ifndef _OLDMULTICORE_H_#define _OLDMULTICORE_H_#include"multicore.h"class OldMultiCore :public MultiCore{public:OldMultiCore(){}~OldMultiCore(){}void VersionOfCore(){cout << "old multi version core" << endl;}};#endif
<pre name="code" class="cpp">//oldsinglecore.h#ifndef _OLDSINGLECORE_H_#define _OLDSINGLECORE_H_#include"singlecore.h"class OldSingleCore :public SingleCore{public:OldSingleCore(){}~OldSingleCore(){}void VersionOfCore(){cout << "old single version core" << endl;}};#endif
<pre name="code" class="cpp">//factory.h#ifndef _FACTORY_H_#define _FACTORY_H_#include"core.h"class Factory{public:Factory(){}virtual ~Factory(){}virtual Core* CreateSingleCore() = 0;virtual Core* CreateMultiCore() = 0;};#endif
<pre name="code" class="cpp">//newversionfactory.h#ifndef _NEWVERSIONFACTORY_H_#define _NEWVERSIONFACTORY_H_#include"factory.h"template<class T>class NewVersionFactory :public Factory{public:NewVersionFactory();~NewVersionFactory();Core* CreateMultiCore();Core* CreateSingleCore();};template<class T>NewVersionFactory<T>::NewVersionFactory(){}template<class T>NewVersionFactory<T>::~NewVersionFactory(){}template<class T>Core* NewVersionFactory<T>::CreateMultiCore(){return new T;}template<class T>Core* NewVersionFactory<T>::CreateSingleCore(){return new T;}#endif
//oldversionfactory.h#ifndef _OLDVERSIONFACTORY_H_#define _OLDVERSIONFACTORY_H_#include"factory.h"template<class T>class OldVersionFactory :public Factory{public:OldVersionFactory();~OldVersionFactory();Core* CreateMultiCore();Core* CreateSingleCore();};template<class T>OldVersionFactory<T>::OldVersionFactory(){}template<class T>OldVersionFactory<T>::~OldVersionFactory(){}template<class T>Core* OldVersionFactory<T>::CreateMultiCore(){return new T;}template<class T>Core* OldVersionFactory<T>::CreateSingleCore(){return new T;}#endif
//main.cpp#include"core.h"#include"factory.h"#include"multicore.h"#include"singlecore.h"#include"newversionfactory.h"#include"oldversionfactory.h"#include"newmulticore.h"#include"newsinglecore.h"#include"oldmulticore.h"#include"oldsinglecore.h"void main(){Factory* pFactoryMultiCore = new NewVersionFactory<NewMultiCore>();pFactoryMultiCore->CreateMultiCore()->NumOfCore();pFactoryMultiCore->CreateMultiCore()->SpeedOfCore();pFactoryMultiCore->CreateMultiCore()->VersionOfCore();delete pFactoryMultiCore;pFactoryMultiCore = NULL;Factory* pFactorySingleCore = new OldVersionFactory<OldSingleCore>();pFactorySingleCore->CreateSingleCore()->NumOfCore();pFactorySingleCore->CreateSingleCore()->SpeedOfCore();pFactorySingleCore->CreateSingleCore()->VersionOfCore();delete pFactorySingleCore;pFactorySingleCore = NULL;}
0 0
- C++抽象基类的实例化(抽象工厂模式)
- 抽象工厂模式实例(C#)
- 抽象工厂模式实例
- 抽象工厂模式(C#)
- C语言实现抽象工厂模式实例
- 设计模式的实现(C++)------抽象工厂模式(AbstractFactory)
- 抽象工厂模式简单实例
- 抽象工厂模式 (C语言实现)
- 【C++】Chapter11:抽象工厂模式
- Objective C--抽象工厂模式
- Objective C 抽象工厂模式
- Objective C--抽象工厂模式
- 抽象工厂(C++)
- 抽象工厂(C++)
- 设计模式(4)-抽象工厂模式及抽象工厂与工厂模式的区别
- 设计模式实例-抽象工厂模式
- 设计模式实例学习-抽象工厂模式
- 跟着实例学习设计模式(5)-工厂方法 、抽象工厂的区别
- Java中Math类中支持的方法
- PHP项目实战-微信支付接口
- 如何在U盘上安装Ubuntu16.01
- 【Leetcode】374. Guess Number Higher or Lower【二分搜索】
- 语音识别系统及科大讯飞最新实践
- C++抽象基类的实例化(抽象工厂模式)
- 解决Android Studio正式版无法在线更新的问题
- 对海量小文件存储优化的一些理解和TFS介绍
- Oracle入门学习(8)
- 杂谈
- java中length,length(),size()区别
- Centos开机自启动redis
- 50个提高PHP编程效率的方法(整理)
- “无法识别的USB设备”如何解决