动、静态联编
简单的说,静态联编就是在程序编译时就完成的过程,而动态联编是在程序运行中完成的过程
class CA
{
public:
void CAFun()
{
cout<<\"CA----Fun\"<<endl;
}
}
CA A;
A.CAFun();
//这里就是一个静态联编
静态联编平时使用较多,在C++实现多态时多用动态联编
class CA
{
public:
virtual void Fun()
{
cout<<\"CA----Fun\"<<endl;
}
}
class CB : public CA
{
public:
void Fun()
{
cout<<\"CB----Fun\"<<endl;
}
}
class CD :public CA,public CB
{
public:
void Fun()
{
cout<<\"CA----Fun\"<<endl;
}
}
//这就是一个动态联编
void objFun(CA * src[],int len)
{
for(int i=0;i<len;++i)
{
src[i]->Fun();
}
}
CB B;
CD D;
CA *A[2]={&B,&D};
objFun(A,2);//调用函数
//这里输出
//CB----Fun
//CD----Fun
纯虚函数
class CA
{
public:
virtual void Fun()=NULL;//纯虚函数
}
上面就是纯虚函数的书写方式,那么它有什么作用呢
纯虚函数的作用是为派生类提供一个统一的接口,当一个基类对虚函数没有一个有意义的实现的时候,可以声明纯虚函数
有纯虚函数存在的类,叫做抽象类,因为它存在纯虚函数,所以必定是作为一个基类,所以也叫做抽象基类,它的纯虚函数的实现在派生类中实现,如果派生类没有给出一个实现,那么这个派生类继续作为一个抽象基类存在
抽象基类的特点
抽象基类不能实例化对象,不过可以通过声明指针和引用来指向派生类对象
习惯上,将抽象基类的构造析构属性改为保护
class CA
{
public:
virtual void Fun()=NULL;
virtual void Fun(int n)=NULL;
}
class CB :public CA
{
public:
void Fun()
{
cout<<\"CBFun\"<<endl;
}
}
class CD :public CB
{
public:
void Fun(int n)//CB中没有对CA中重载的纯虚函数进行实现,在这里实现
{
cout<<\"CDFun\"<<endl;
}
}
抽象基类不能实例化对象,不过可以通过声明指针和引用来指向派生类对象
CA *pA;
CB B;
pA=&B;
pA->Fun();
//这里输出CB的Fun函数
继续阅读与本文标签相同的文章
上一篇 :
3D打印的优劣大对比,真的能风靡全球吗?
下一篇 :
2017年中国大数据技术大会举行,云计算受关注
-
阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性| 9月9号栖夜读
2026-05-18栏目: 教程
-
3年Java开发6个点搞定高并发系统面试疑惑
2026-05-18栏目: 教程
-
请求支援!我被“非结构化数据包围了” | 开发者必读(060期)
2026-05-18栏目: 教程
-
研发效能提升 36 计第一课:互联网时代研发效能的挑战和应对之道
2026-05-18栏目: 教程
-
Service Mesh 发展趋势:云原生中流砥柱
2026-05-18栏目: 教程
