目录
一、虚函数
1.1 问题引入
c++在默认情况下,对函数成员的调用实施的是静态连编(static binding),也叫静态绑定。
此时,如果子类中的函数F覆盖了基类的函数F,那么基类中的其他函数调用函数F的时候,调用的仍然是基类中的这个函数F,而不是子类中覆盖的那个。
这时在某些应用下会出现一个问题,考虑下面的程序:
//基类
class Meter
{
private:
float dataMeter;
public:
void setData(float m)
{
dataMeter = m;
}
float getData(){return dataMeter;}
float dataSquare(){return getData()*getData();}
};
//子类
class Centimeter:public Meter
{
private:
float dataCentimeter;
public:
//覆盖基类的setdata
void setData(float m)
{
dataCentimeter = m;
Meter::setData(dataCentimeter/10.0f);
}
//覆盖基类的getdata
float getData(){return dataCentimeter;}
};
在主函数中