Skip to content

C++中的接口

C++ 中并没有interface关键字用于定义接口,而是直接在基类中声明虚函数作为接口,其派生类中必须实现此接口(如果派生类未被实例化过,也可以不实现虚函数),否则编译阶段报错。

cpp
#include <iostream>

class Animal {
public:
    std::string type;
    std::string name;

    virtual void eat() = 0;

    virtual void die() = 0;

    [[nodiscard]] std::string getName() const { return name; }
};

class Dog : public Animal {
public:
    Dog() = default;

    void eat() override {
        std::cout << "Dog eat." << std::endl;
    };

    void die() override {
        std::cout << "Dog die." << std::endl;
    };
};

class ShibaInu : public Dog {
public:
    ShibaInu() = default;

    void eat() override {
        std::cout << this->getName() << " eat." << std::endl;
    };

    void die() override {
        std::cout << this->getName() << " die." << std::endl;
    };
};

void animalEat(Animal *animalPtr) {
    animalPtr->eat();
}

int main(int argc, char *argv[]) {
    ShibaInu dog{};
    dog.name = "小柴";
    animalEat(&dog);
}

上面Animal类中有两个虚函数,Dog类继承自Animal,且Dog实现了两个接口。ShibaInu类继承了Dog,且ShibaInu类重写了两个接口。

此时有个函数animalEat接收Animal类为参数,那么他就可以接收Dog类,也可以接收ShibaInu类,只要接收到的类继承自Animal即可,animalEat就可以调用Animal中的接口。