c++ 接口類


什么是接口類?2017-06-07

接口類就是只提供接口不提供實現的類,就是接口類,接口類和抽象類對C++而言,沒有什么區別。

接口類有如下特點:

  1. 子類來實現接口類中沒有實現的所有接口。
  2. 接口方法前面有virtual關鍵詞修飾,並且等於0。
  3. 只能被繼承,不能獨自生成對象。

實現一個動物的接口類例子如下:

#ifndef BASEINTERFACE_H
#define BASEINTERFACE_H
//用於動物的接口類
class BaseInterface{
    //是動物都要吃東西,睡覺以及愛好
public:
    virtual void Eat()=0;
    virtual void Sleep()=0;
    virtual void Hobby()=0;

    virtual ~BaseInterface(){}
};

#endif // BASEINTERFACE_H

人類繼承接口類

#ifndef PERSON_H
#define PERSON_H
#include <QString>
#include "baseinterface.h"
//繼承動物的接口類
class Person : public BaseInterface
{

public:
    Person();
//繼承動物接口后一定要實現接口類中的接口
    void Eat();
    void Sleep();
    void Hobby();
//但是人類作為動物有自己的行為和愛好
private:
    QString personName;
public:
    void Speak();
    void SetName(QString pName);
    QString GetName();
};

#endif // PERSON_H

人類實現接口類方法:

#include "person.h"
#include <QDebug>
Person::Person()
{
    personName = "";
}

void Person::Eat(){
    qDebug()<<"eat bread";
}
void Person::Sleep(){
    qDebug()<<"Sleep 1 hour";
}
void Person::Hobby(){
    qDebug()<<"run 35 mins";
}
void Person::Speak(){
    qDebug()<<"person speak a lot of language";
}
void Person::SetName(QString pName){
    personName = pName;
    qDebug()<<personName;
}
QString Person::GetName(){
    return personName;
}

更為高級的接口類,后續

2017-06-13 10:16:58

如果多個類同事繼承基類,成為子類后,在聲明接口類類對象調用虛函數時,怎么判斷調用的是哪個子類的虛函數呢?這里要注意以下幾點:

  1. 接口類生命的對象只能是指針類型。
  2. 具體調用哪個子類里面父類純虛函數的實現要取決於接口類中調用純虛函數的對象指向哪個子類。
  3. 可以動態的指定子類
#include "dog.h"
#include <QDebug>
Dog::Dog()
{
    DogName = "";
}

void Dog::Eat(){
    qDebug()<<"eat bread";
}
void Dog::Sleep(){
    qDebug()<<"Sleep 1 hour";
}
void Dog::Hobby(){
    qDebug()<<"run 35 mins";
}
void Dog::Speak(){
    qDebug()<<"Dog speak a lot of language";
}
void Dog::SetName(QString pName){
    DogName = pName;
    qDebug()<<DogName;
}
QString Dog::GetName(){
    return DogName;
}

上面又寫了一個Dog類。

int main(){
    BaseInterface *pBaseInterface = new Person();
    pBaseInterface->sleep();
    BaseInterface *pBaseInterface1 = new Dog();    
    pBaseInterface1->Sleep();
    return 0;
}

動態指定子類可以使用類模板,請關注后續


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM