接口类简介:
接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。
用c++实现接口类时需要注意一下几点:
1、接口类中不应该声明成员变量,静态变量。
2、可以声明静态常量作为接口的返回值状态,需要在对应的cpp中定义并初始化,访问时需要使用"接口类型::静态常量名"访问
2、定义的接口方法使用virtual 修饰符 和 “=0” 修饰,表示该方法是纯虚的。
3、因为接口类是无法创建对象的,所以不应该编写构造函数和析构函数
IShape.h
#ifndef ISHAPE_H #define ISHAPE_H class IShape { public: virtual int area() = 0; static const int MIN_AREA; }; #endif // ISHAPE_H
IShape.cpp
#include "ishape.h" const int IShape::MIN_AREA = 0;
IAction.h
#ifndef IACTION_H #define IACTION_H class IAction { public: virtual void run() = 0; }; #endif // IACTION_H
Bird.h
#ifndef BIRD_H #define BIRD_H #include "iaction.h" #include "ishape.h" class Bird : public IShape, public IAction { public: Bird(); ~Bird(); // IAction interface public: void run() override; // IShape interface public: int area() override; }; #endif // BIRD_H
Bird.cpp
#include "bird.h" #include <iostream> Bird::Bird() { std::cout<<"小鸟出生了"<<std::endl; } Bird::~Bird() { std::cout<<"小鸟挂掉了"<<std::endl; } void Bird::run() { std::cout<<"小鸟飞呀飞呀"<<std::endl; } int Bird::area() { std::cout<<"小鸟的形状像小鸡仔的形状"<<std::endl; std::cout<<IShape::MIN_AREA<<std::endl; //这里访问常量是注意 }
main.cpp
#include "bird.h" void doRun(IAction *object) { object->run(); } void getArea(IShape *object) { object->area(); } int main() { Bird *bird = new Bird(); doRun(bird); getArea(bird); delete bird; return 0; }
执行效果:
参考: