为什么用
- 如果没有抽象类,我们无法将别人提供的接口拿来编译,只能将别人的源码或者库都拿来。这也就是大家所说的接口与实现分离。
- 将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为。对应暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现。
举例:如果 ABC做的是同一个工程,为了保证代码不重,方便维护。这样就不能再使用源码或者编译成的库+h文件给BC的方法了,只能将头文件提供给BC,而且这个头文件要做成一个抽象类,这样BC才能编译通过。
- 注意:抽象类只能作为基类来使用,不能定义抽象类的对象。当抽象类的派生类实现了继承而来的纯虚函数后才能实例化对象。
如何用
#include<iostream>
using namespace std;
class People{//People为抽象类
public:
virtual void setID(int ID)=0;//申明纯虚函数
virtual int getID()=0;
People(int _ID):ID(_ID){};//父类的构造函数
protected:
int ID;
};
class Student:public People{
public:
void setID(int ID);//实现父类的虚函数
int getID();
Student(int _ID):People(_ID){};//注意是向父类传递参数
private:
};
void Student::setID(int ID){
this->ID=ID;
}
int Student::getID(){
return ID;
}
int main(){
Student s(1);
cout<<s.getID()<<endl;
return 0;
}
注:
- 虚函数的声明
virtual 函数类型 函数名(参数表)=0;//等于0表示没有函数体
- 带有纯虚函数的类称为抽象类,不可实例化