当前位置 : 主页 > 编程语言 > c语言 >

类和对象(多态)

来源:互联网 收集:自由互联 发布时间:2023-09-03
多态是C++面向对象三大特性之一 多态分为两类 1.静态多态:函数重载 和 运算符重载属于静态多态,复用函数名 2.动态多态:派生类和虚函数实现运行时多态。 静态多态和动态多态的区

多态是C++面向对象三大特性之一

多态分为两类

1.静态多态:函数重载 和 运算符重载属于静态多态,复用函数名

2.动态多态:派生类和虚函数实现运行时多态。

静态多态和动态多态的区别:

静态多态的函数地址早绑定-编译阶段确定函数地址。

动态多态的函数地址晚绑定-运行阶段确定函数地址。


动态多态满足条件

1.存在继承关系

2.子类重写父类的虚函数

重写 函数返回值类型 函数名 参数列表 完全相同

动态多态使用

父类指针或引用  指向子类对象

例子:

son1类和son2类是person类的子类,并且person是抽象类

son1 a;

son2 b;


person& p = a;

p.speak();

person* p1 = new son2;

p1->speak();


person* p2 = &b;

p1->speak();


多态的优点

1.代码组织结构清晰

2.可读性强

3.利于前期和后期的扩展以及维护。

总结:C++开发提倡利用多态设计程序架构,因为多态优点很多


纯虚函数和抽象类

纯虚函数语法:virtual  返回值类型 函数名  (参数列表)=0;

当类中有了纯虚函数,这个类也称为抽象类。

抽象类的特点:

1.无法实例化对象

2.子类必须重写抽象类中的纯虚函数,否则也属于抽象类。


虚析构和纯虚析构

目的:多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。

共性:

1.可以解决父类指针释放子类对象

2.都需要具体函数实现

区别:

如果是纯虚析构,该类属于抽象类,无法实例化对象。

语法:

虚析构:virtual ~类名() {}

纯虚析构:virtual ~类名()=0;    //在类内声明

类名:: ~类名(){}   //在类外实现

总结:

1.虚析构或纯虚析构就是用来解决通过父类指针释放子类对象。

2.如果子类中没有堆区数据, 可以不写为虚析构或纯虚析构。

3.拥有纯虚析构的类和拥有纯虚函数的类一样都属于抽象类。

                                               

【文章原创作者:建湖网页开发公司 http://www.1234xp.com/jianhu.html 欢迎留下您的宝贵建议】
上一篇:ceph QoS Quality of Service
下一篇:没有了
网友评论