虚函数:
引入目的:
多态性,动态绑定,c++的多态性通过虚函数来实现的。
抽象类:
引入目的:
1、方便使用多态特性,需要在基类中定义虚函数。
2、有些情况下,不允许基类本身生成对象,e.g. 动物可以派生出狗、猫等子类,这些子类可以生成相应对象,但是动物本身不应生成对象,明显不合理。
c++ 中抽象类的实现是通过定义纯虚函数来实现的,在类中定义了纯虚函数的类被称为抽象类,该类不可以被实例化。
定义纯虚函数:
virtual returnType functionName(parameter list)=0
纯虚函数必须在基类中声明,在基类中未被定义,要求派生类都要定义自己的实现方法。
虚函数:
该函数在基类中被声明为virtual,但是可以有基类进行定义,派生类中可以重新定义,可以实现动态重载。
e.g.抽象类代码:
#include <iostream>
using namespace std;
class A{
private:
int data;
public :
A():data(0){}
virtual int a()=0; //纯虚函数,A为抽象类
virtual int getData(){
return data;
}
void setData(int a)
{
data=a;
}
};
class B:public A{
int d;
public:
B():d(1){}
int a(){
return d+1;
}
int getData()
{
return d;
}
};
int main()
{
// A a; 抽象类不可被实例化
// cout<<a.getData()<<endl;
B b;
cout<<b.getData()<<endl;
cout<<b.a()<<endl;
return 0;
}
#include <iostream>
using namespace std;
class A{
private:
int data;
public :
A():data(0){}
// virtual int a()=0;
virtual int getData(){
return data;
}
void setData(int a)
{
data=a;
}
};
class B:public A{
int d;
public:
B():d(1){}
int a(){
return d+1;
}
int getData()
{
return d;
}
};
int main()
{
A a;
cout<<a.getData()<<endl;
B b;
cout<<b.getData()<<endl;
cout<<b.a()<<endl;
return 0;
}