对于C++多态性的认识
1.说在前面:
项目大体上解决了,现在可以腾出时间来优化项目和学习新的知识
2.C++多态性
1.简述:(多态)polymorphism
对于C++的多态性,这是一项很灵活的技术,用法十分灵巧,有难度;简单来说:多态性就是适当的使用接口函数,通过一个接口来使用多种方法,(相当于上级说一个命令,A,B,C,D等人都做出反应,一个命令,多个反应;
2.怎样实现多态性
1.采用虚函数和指针来实现多态性
通过虚函数来定义要实现的方法,通过基类的指针指向不同的子类的虚函数方法
2.多态性的优点是实现接口的重用
3.虚函数:
1.虚函数采用关键字virtual修饰,虚函数允许子类重新去定义成员函数;
2.重写(函数名一致,但是内容不一致)//又称覆盖(override)
3.重载(函数名一致,但是参数表列不一致)
4.多态性一般就是通过对虚函数进行重写,然后用基类指针指向不同的子对象,调用不同的虚函数
4.代码实现
[cpp]view plaincopy
- #include<iostream>
- #include<stdlib.h>
- #include<string>
- usingnamespacestd;
- classIshape
- {
- public:
- //多态性实现需要虚方法
- virtualdoubleget_Area()=0;
- virtualstringget_Name()=0;
- };
- //定义类1CCircle
- classCCircle:publicIshape
- {
- //声明的时候需要带上Virtual关键字显示多态性
- public:
- CCircle(doubleradius){this->c_radius=radius;}
- CCircle(){}
- virtualdoubleget_Area();
- virtualstringget_Name();
- private:
- doublec_radius;//定义圆的半径
- };
- //定义方法
- doubleCCircle::get_Area()
- {
- return3.14*c_radius*c_radius;
- }
- stringCCircle::get_Name()
- {
- return"CCircle";
- }
- classCRect:publicIshape
- {
- public:
- CRect(doublelength,doublewidth){this->m_length=length,this->m_width=width;}
- CRect(){};
- virtualdoubleget_Area();
- virtualstringget_Name();
- private:
- doublem_length;
- doublem_width;
- };
- doubleCRect::get_Area()
- {
- returnm_length*m_width;
- }
- stringCRect::get_Name()
- {
- return"Rectangle";
- }
- //通过指针指向不同的类从而使用不同的方法
- #include"text.h"
- voidmain()
- {
- <spanstyle="white-space:pre;"></span>Ishape*point=NULL;//建立指针
- <spanstyle="white-space:pre;"></span>point=newCCircle(10);
- <spanstyle="white-space:pre;"></span>//圆类
- <spanstyle="white-space:pre;"></span>cout<<point->get_Name()<<"的面积是:"<<point->get_Area()<<endl;
- <spanstyle="white-space:pre;"></span>deletepoint;
- <spanstyle="white-space:pre;"></span>//矩形类
- <spanstyle="white-space:pre;"></span>point=newCRect(10,20);
- <spanstyle="white-space:pre;"></span>cout<<point->get_Name()<<"的面积是:"<<point->get_Area()<<endl;
- <spanstyle="white-space:pre;"></span>deletepoint;
- <spanstyle="white-space:pre;"></span>system("pause");
- }
- <spanstyle="white-space:pre;"></span>
- <spanstyle="white-space:pre;"></span>
- <spanstyle="white-space:pre;"></span>
- <spanstyle="white-space:pre;"></span>