对于C++多态性的认识

你好C 2018-05-14

1.说在前面:

项目大体上解决了,现在可以腾出时间来优化项目和学习新的知识

2.C++多态性

1.简述:(多态)polymorphism

对于C++的多态性,这是一项很灵活的技术,用法十分灵巧,有难度;简单来说:多态性就是适当的使用接口函数,通过一个接口来使用多种方法,(相当于上级说一个命令,A,B,C,D等人都做出反应,一个命令,多个反应;

2.怎样实现多态性

1.采用虚函数和指针来实现多态性

通过虚函数来定义要实现的方法,通过基类的指针指向不同的子类的虚函数方法

2.多态性的优点是实现接口的重用

3.虚函数:

1.虚函数采用关键字virtual修饰,虚函数允许子类重新去定义成员函数;

2.重写(函数名一致,但是内容不一致)//又称覆盖(override)

3.重载(函数名一致,但是参数表列不一致)

4.多态性一般就是通过对虚函数进行重写,然后用基类指针指向不同的子对象,调用不同的虚函数

4.代码实现

[cpp]view plaincopy

  1. #include<iostream>
  2. #include<stdlib.h>
  3. #include<string>
  4. usingnamespacestd;
  5. classIshape
  6. {
  7. public:
  8. //多态性实现需要虚方法
  9. virtualdoubleget_Area()=0;
  10. virtualstringget_Name()=0;
  11. };
  12. //定义类1CCircle
  13. classCCircle:publicIshape
  14. {
  15. //声明的时候需要带上Virtual关键字显示多态性
  16. public:
  17. CCircle(doubleradius){this->c_radius=radius;}
  18. CCircle(){}
  19. virtualdoubleget_Area();
  20. virtualstringget_Name();
  21. private:
  22. doublec_radius;//定义圆的半径
  23. };
  24. //定义方法
  25. doubleCCircle::get_Area()
  26. {
  27. return3.14*c_radius*c_radius;
  28. }
  29. stringCCircle::get_Name()
  30. {
  31. return"CCircle";
  32. }
  33. classCRect:publicIshape
  34. {
  35. public:
  36. CRect(doublelength,doublewidth){this->m_length=length,this->m_width=width;}
  37. CRect(){};
  38. virtualdoubleget_Area();
  39. virtualstringget_Name();
  40. private:
  41. doublem_length;
  42. doublem_width;
  43. };
  44. doubleCRect::get_Area()
  45. {
  46. returnm_length*m_width;
  47. }
  48. stringCRect::get_Name()
  49. {
  50. return"Rectangle";
  51. }
  52. //通过指针指向不同的类从而使用不同的方法
  53. #include"text.h"
  54. voidmain()
  55. {
  56. <spanstyle="white-space:pre;"></span>Ishape*point=NULL;//建立指针
  57. <spanstyle="white-space:pre;"></span>point=newCCircle(10);
  58. <spanstyle="white-space:pre;"></span>//圆类
  59. <spanstyle="white-space:pre;"></span>cout<<point->get_Name()<<"的面积是:"<<point->get_Area()<<endl;
  60. <spanstyle="white-space:pre;"></span>deletepoint;
  61. <spanstyle="white-space:pre;"></span>//矩形类
  62. <spanstyle="white-space:pre;"></span>point=newCRect(10,20);
  63. <spanstyle="white-space:pre;"></span>cout<<point->get_Name()<<"的面积是:"<<point->get_Area()<<endl;
  64. <spanstyle="white-space:pre;"></span>deletepoint;
  65. <spanstyle="white-space:pre;"></span>system("pause");
  66. }
  67. <spanstyle="white-space:pre;"></span>
  68. <spanstyle="white-space:pre;"></span>
  69. <spanstyle="white-space:pre;"></span>
  70. <spanstyle="white-space:pre;"></span>

相关推荐