接口類簡介:
接口是一系列抽象方法的聲明,是一些方法特征的集合,這些方法都應該是抽象的,需要由具體的類去實現,然后第三方就可以通過這組抽象方法調用,讓具體的類執行具體的方法。
用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; }
執行效果:
參考:
https://www.cnblogs.com/lx753932159/p/5464406.html
https://blog.csdn.net/netyeaxi/article/details/80724557