简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:理解C++虚函数和纯虚函数多态调用区别
2.应用实例
v1.0 纯虚函数
#include <iostream>
using namespace std;
class A{
public:
virtual void test_Rf() = 0;
};
class B : public A{
public:
virtual void test_Rf() {
printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
}
};
class C : public A{
public:
virtual void test_Rf() {
printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
}
};
class D: public C{
public:
virtual void test_Rf(){
printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
}
};
//B继承A; C继承于A, D继承于A.
int main(){
A *a =new D;
B *b =static_cast<B*>(a);
b->test_Rf();
}
打印:
xxx--------->test_Rf(), line = 28
v2.0 虚函数
#include <iostream>
using namespace std;
class A{
public:
//virtual void test_Rf() = 0;
};
class B : public A{
public:
virtual void test_Rf() {
printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
}
};
class C : public A{
public:
virtual void test_Rf() {
printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
}
};
class D: public C{
public:
virtual void test_Rf(){
printf("xxx--------->%s(), line = %d\n",__FUNCTION__,__LINE__);
}
};
//B继承A; C继承于A, D继承于A.
int main(){
A *a =new D;
B *b =static_cast<B*>(a);
b->test_Rf();
}
打印:
xxx--------->test_Rf(), line = 28
3.总结
1.B继承A,C继承A,D继承C。
B、C、D类都重写了test_Rf,不管是纯虚函数,还是虚函数,都最终调用了class C中的test_Rf函数。