什么是虚函数??
#include<iostream.h>
class Base
{
public:
virtual void fn()
{
cout <<"In Base class/n";
}
};
class SubClass :public Base
{
public:
virtual void fn()
{
cout <<"In SubClass/n";
}
};
class A : public Base
{
public:
virtual void fn()
{
cout <<"In class A/n";
}
};
void test(Base& b)
{
b.fn();
}
void main()
{
// Base bc;
SubClass sc;
A a;
// cout <<"Calling test(bc)/n";
// test(bc);
// cout <<"Calling test(sc)/n";
test(sc);
test(a);
}
难道仅仅因为我们在前面加上virtual关键字么??
c++在引入虚函数体系的目的是什么??
在一个类中引入虚函数,意味着有这个类派生出的类中可以重新定义这个函数,基类中的虚函数声明有很多种,如果声明成virtual void p()=0的形式,说明这个基类不能创建对象,只能派生类,如果他的派生类需要使用这个函数只能重新定义这个函数,这样的类叫做抽象类
什么是多态??
上面我们在基类和派生类当中定义了很多的同名同参数的函数,当我们调用的时候只写了一个相同的名字,编译器怎么知道我们调用的是哪一个函数,这个时候就要根据我们调用的对象是有那个类创建的,他会自动匹配,这种特征就是所谓的多态。
由于在程序的运行中决定具体调用哪一个函数,所以编译时无法确定连接那一个虚函数,由此c++提出了“动态绑定”或“迟后联编”的概念,具体技术实现是为每个对象建立一个“虚函数表“。编译器把对函数的调用编译位指向”虚函数表“的一个下标,运行时即可有所引用的对象找到”虚函数表“及下标,引导最终的调用