C++抽象类(接口)
一、接口:描述类的行为和功能,而无需完成类的特定实现
C++接口通过抽象类实现的,设计抽象类的目的,是为了给其他类提供一个可以继承的适当的基类;如果派生类没有重写所有纯虚函数,则派生类也是抽象类(抽象派生类);派生类只有实现所继承的抽象基类中的所有纯虚函数,才能进行实例化。
二、抽象类与纯虚函数(抽象方法)
纯虚函数是一个在 基类中声明的虚函数,它在该基类中没有定义具体的函数体(操作内容),要求派生类根据实际需要定义自己的版本,设计多层次类继承关系时用到。把某个方法声明为一个抽象方法等于告诉编译器,这个方法必不可少,但目前在基类中还不能为它提供实现。
纯虚函数的标准格式:
//在虚函数尾部加上" =0 " 一个虚函数便被声明成为了一个纯虚函数
virtual 返回类型 函数名(参数表)=0;
- 注意:抽象类不能声明对象,但可以声明对应的指针和引用。
策略模式
单纯的策略模式与简单工厂模式作对比,确实并不能看出策略模式有什么优势,因为始终还是绕不开如何去new一个我们需要的对象。但看到把简单工厂和Context结合后…觉得这玩意er还是有点用的,但就是前期铺垫的过于啰里吧嗦。
就这本书上举的例子而言,简言之我认为“策略模式”就是把“工厂”多封装一层A,new出来的对象用A里头的成员变量a来接收,再给A加个成员函数供用户去调用,而这个成员函数的功能就是调用成员变量对应的那个类的虚函数咯。
class Strategy
{
public:
virtual void AlgorithmInterface() = 0;//纯虚函数
};//拥有纯虚函数,属于抽象类
//具体策略A
class ConcreteStrategyA : Strategy
{
void AlgorithmInterface()//虚函数
{
printf("策略A");
}
};
//具体策略B
class ConcreteStrategyB : Strategy
{
void AlgorithmInterface()//虚函数
{
printf("策略B");
}
};
//具体策略C
class ConcreteStrategyC : Strategy
{
void AlgorithmInterface()//虚函数
{
printf("策略C");
}
};
//上下文
class Context
{
Strategy *strategy;
Context(Strategy *strategy)//初始化时需传入具体的策略对象
{
this->strategy = strategy;
}
void ContextInterface()
{
this->strategy->AlgorithmInterface();
}
};
上文提到简单的策略模式、以及策略+工厂,都绕不开如何new一个对象,被迫都使用switch进行条件判断,来new对象,这样导致每加一个方法,我们都需要修改switch的内容。所以更好的方法是用到反射。
标签:策略,AlgorithmInterface,模式,Strategy,纯虚,抽象类,函数 From: https://blog.csdn.net/qq_45880695/article/details/136627564