解耦合 和 模块的划分
c++没有接口的概念 但可以使用纯虚函数(抽象类)实现接口的功能
纯虚函数和抽象类
纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本
纯虚函数为各派生类提供一个公共界面(接口的封装和设计,软件的模块功能更划分)
纯虚函数说明形式:
virtual 类型 函数名(参数表)= 0;
含有纯虚函数的基类 称为抽象类。
class shape { point center; public: virtual void rotate(int)=0; virtual void draw()=0; void move(point p) { center=p; draw(); } }
类shape包含纯虚函数,就是抽象类
shape x; //error,抽象类不能建立对象 shape*p; //ok,可以声明抽象类指针 shape f(); //error,抽象类不能作为返回类型 void g(shape); //error,抽象类不能作为参数类型 shape& h(shape&) //ok,可以声明抽象类的引用
子类继承 抽象类 并实现其中的 virtual函数后,子类就可以实例化一个对象
将子类的地址给 抽象类的指针,就可用抽象类(父类)指针调用子类相应的函数(即在抽象类中的虚函数在子类中的实现)
void objplay(shape* base) //产生多态 { base->draw(); } area c1(1,2); square c2(2,3); objplay(&c1); objplay(&c2);
多继承可以用,但规范的用法是一个正常父类,其余父类均为抽象类
几个抽象类中只有可以有相同的纯虚函数,子类需要将不重复的纯虚函数全部实现一遍。
将子类对象赋值给接口指针实现多态
#prama once //可以保证头文件只包含一次
注入 使用框架将任务实现传入框架
控制反转 回调函数
MVC
C:控制(主框架) M:模型(厂商实现) V:视图(主程序测试程序)