抽象类(接口):
#ifndef COLOR_CPP_
#define COLOR_CPP_
class Color
{
public:
virtual void draw() = 0;
};
#endif
virtual void draw() = 0;
纯虚函数,相当于java的接口方法;
#ifndef COLOR_CPP_
#define COLOR_CPP_
....
#endif
这种写法的原因是:抽象类要被实体类继承,每一个实体类都要include同一个文件,就会报错:
Error:redefinition of class,添加宏定义就会避免这种错误。
实体类:
#include"color.cpp"
#include<iostream.h>
class Red:public Color
{
public:
Red(){};
void draw()
{
cout<<"Red"<<endl;
}
};
#include"color.cpp"
#include<iostream.h>
class Green:public Color
{
public:
Green(){};
void draw()
{
cout<<"Green"<<endl;
}
};
继承抽象类,相当于实现接口,就要实现所有纯虚函数(接口方法)。
构造函数可以不写,使用默认构造函数;
抽象工厂类
#include"color.cpp"
class AbstractFactory
{
public:
virtual Color* getColor(char type[]) = 0;
};
纯虚函数返回Color类的对象指针。
实体工程类
#include"AbstractFactory.cpp"
#include"color.cpp"
#include"red.cpp"
#include"green.cpp"
#include<string.h>
class ColorFactory:public AbstractFactory
{
public:
Color* getColor(char type[])
{
if(strcmp(type,"red") == 0)
{
return new Red();
}
else if(strcmp(type,"green") == 0)
{
return new Green();
}
}
};
同样,继承抽象类就要实现纯虚函数,跟java是一样的道理;
抽象类至少有一个纯虚函数。
主函数
#include"ColorFactory.cpp"
#include<iostream.h>
void main()
{
char type[5] = {};
cout<<"输入颜色"<<endl;
cin>>type;
ColorFactory* colorFactory = new ColorFactory();
Color* color = colorFactory -> getColor(type);
color -> draw();
}
-> 的含义是 对象指针指向函数 跟java是一样的。