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中的接口。