接口描述了类的行为和功能,而不需要完成类的特定实现。C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来指定的 virtual void GetStu() = 0; 。设计抽象类(通常称为 ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。因此,如果一个ABC 的子类需要被实例化,则必须实现每个虚函数,这也意味着 C++ 支持使用 ABC 声明接口。如果没有在派生类中重写纯虚函数,就尝试实例化该类的对象,会导致编译错误。可用于实例化对象的类被称为具体类。
1 #include <iostream> 2 using namespace std; 3 class Student 4 { 5 public: 6 Student(int cAchie, int cId) 7 { 8 achie = cAchie; 9 id = cId; 10 } 11 virtual void GetStu() = 0; //纯虚函数 12 protected: 13 int achie; 14 int id; 15 }; 16 17 class GetAchie : public Student 18 { 19 public: 20 GetAchie(int cAchie, int cId) : Student(cAchie, cId) {}; //显式继承构造函数 21 void GetStu() 22 { 23 cout << achie << endl; 24 } 25 }; 26 27 class GetId : public Student 28 { 29 public: 30 using Student::Student; //隐式继承构造函数 31 void GetStu() 32 { 33 cout << id << endl; 34 } 35 }; 36 37 int main() 38 { 39 GetAchie ga(97,24615); 40 ga.GetStu(); 41 GetId gd(97, 24615); 42 gd.GetStu(); 43 system("pause"); 44 return 0; 45 }
结果为: 97 24615