虚函数---类的成员函数

虚函数—类的成员函数
说明:在成员函数前面添加virtual关键字 ----那么这个函数就成员了虚函数
如果一个类中存在虚函数,那么这个类的对象中包含一个虚表(虚表首地址)
虚表在对象空间的开始位置
class Data
{
public:
Data(){}
~Data(){}
virtual void show(){}//虚函数
virtual void info(){}
protected:
int data;
};

如果对象调用的是虚函数,那么会查询虚表,再根据虚表中的函数指针执行

纯虚函数
定义:函数不需要实现, 在函数声明后面赋值为0
virtual void info()=0;
特点:如果一个类中包含纯虚函数,那么这个类就是抽象类(不能创建对象)
抽象类被派生出子类,如果在子类中没有把父类的中纯虚函数全部实现, 那么子类还是抽象类

虚函数+继承 -----实现 多态

虚函数, 继承, 在子类中重新实现父类的虚函数, 把子类地址赋值给父类指针, 通过父类指针类调用虚函数(根据虚表来查询调用)

虚函数默认参数
class Base
{
public:
virtual void show(int b=321)
{
cout<<“Base::show()–”<<b<<endl;
}
protected:
int data;
};

class Child:public Base
{
public:
void show(int c=123)
{
cout<<“Child::show()—”<<c<<endl;
}
protected:
int cdata;
};

int main(int argc, char *argv[])
{

Child ch;
ch.show(10);

//---------多态
Base* bptr = &ch;
bptr->show();  //----调用子类函数,父类中的默认参数

return 0;

}

原因,函数是在虚表中查询执行, 参数是在通过指针在父类数据中获取

猜你喜欢

转载自blog.csdn.net/qq_41256954/article/details/88851231