虚函数与纯虚函数的相同点:
1.都可以在子类中重载,以多态的形式被调用。
2.通常都存在于抽象基类中,被继承的子类重载,目的是提供一个统一的接口。
3.都不能使用static标示符(原因:虚函数是动态绑定的)
虚函数与纯虚函数的不同点:
1.虚函数为了重载和多态的需要,已在类中被定义(即便定义为空),所以在子类中可以重写其功能,也可以不用改写。
纯虚函数仅仅在类中被声明,其定义必须在子类中实现。
2.虚函数可以被直接调用,也可以被子类重载以后以多态的形式调用。
纯虚函数必须在子类中实现该函数才可以使用(原因:纯虚函数在类中仅是一个声明)
3.虚函数的声明:virtual 函数名( )
{
body;
}
纯虚函数的声明:virtual 函数名( ) = 0;
4.含有纯虚函数的类被称为抽象类,而只含有虚函数的类不能被称为抽象类。
5.如果一个类中含有纯虚函数,那么对此类进行的任何实例化的语句都将导致错误(原因:抽象基类不能被直接调用)。
以下为一个简单的虚函数和纯虚寒数的示例:
<span style="font-size:18px;">
class father
{
public:
virtual void test_1(){cout<<"It is a father class!";}
virtual void test_2 = 0;
...
}
class son:public father
{
void test_1(){cout << "It is a father class too!"}
void test_2(){cout << "It is a sub class!"}
}
int main(void)
{
father *test;
test = new son;
test -> test_1();
test -> test_2();
return 0;
}
</span>