首页 > 编程语言 > 详细

c++的多态性

时间:2021-05-01 12:23:38      阅读:12      评论:0      收藏:0      [点我收藏+]
  1. 静态联编

静态联编所支持的多态性称为编译时的多态性,例如重载函数就是静态联编的例子之一,它是在编译时选择相应的函数运行,根据类型匹配函数重载和运算符重载,与动态联编不同.

  1. 动态联编

动态联编是在程序运行时进行的联编,根据实际对象调用相应函数,虚函数就是动态联编的基础.

虚函数

虚函数的关键字是virtual,例如:

virtual<返回值类型><函数名>(<形式参数表>)

{

<函数体>

}

在类中,基类中说明的虚函数具有子自动向下传给他派生类的性质,也就是说,基类虚函数可以继承给他的子类,虚函数与重载函数的区别就是,它所用的类型和函数形参需要一致,为了区别虚函数和重载函数,把在派生类中重定义的基类虚函数称为覆盖,我们也可以叫它重写.

  1. 纯虚函数和抽象类

(1) 纯虚函

如果在基类中不能给出有意义的虚函数的实现,但又必须让基类为派生类提供一个公共界面函数,这时就可以将它说明为纯虚函数.

我们可以这么定义:

virtual<返回值类型><函数名>(<形式参数表>)=0;

//这种只是表示虚函数的一种形式,并不是说明它的返回值为0;

 

(2) 抽象类

一个类中可以说明多个纯虚函数,含有纯虚函数的类被称为抽象类.从一个抽象类派生的类必须覆盖纯虚函数,或者在派生类中仍然定义它为纯虚函数,比如程序将会报错.

在成员函数内可以调用纯虚函数,但在构造函数和析构函数中调用会导致程序报错,因为没有纯虚函数的定义代码.

:

class va

{

public:

virtual void fun=0;

void fun2(){fun1();} //正确

va(){fun(1);} //错误

 

};

(3) 虚析构函数

一个类中将成员设置为虚函数,他只是增加一些资源开销,并没有其他坏处.析构函数也可以是虚函数,并且在动态联编时,最好将虚构函数设置为虚函数.因为析构没有参数,所以一个类中只能有一个虚析构函数.

我们写个简单程序分析一下:

# include < iostream>

using namespace std;

class Base
{
public:
    Base(){}
virtual~Base(){cout<<"Basedestructor is called."<<endl;}

};
class Subclass : public Base
{
public:
Subclas(){}

~Subclass();

Subclass:: ~ Subclass()

{

cout<<”Subclass   destructor is called.”<<endl;

}
int main()
{
Base * b= new Subclass;

delete b;
return 0;

}

这个程序输出的结果为:

Subclass   destructor is called.

Base destructor is called.

该程序中基类的析构函数由派生类的析构函数调用,如果析构函数不是虚函数,则语句delete b;将根据base类的析构函数运行.

 

 

 

c++的多态性

原文:https://www.cnblogs.com/zxy20020103/p/14723805.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!