对于C++多态性的认识
程序员文章站
2022-04-24 16:39:14
1.说在前面: 项目大体上解决了,现在可以腾出时间来优化项目和学习新的知识 2.C++多态性 1.简述:(多态)polymorphism 对于C++的多态性,这是一项很灵活的技术,用法十分灵巧,有难度;简单来说:多态性就是适当的使用接口函数,通过一个接口来使用多种方法,(相当于上级说一个命令,A,B ......
1.说在前面:
项目大体上解决了,现在可以腾出时间来优化项目和学习新的知识
2.C++多态性
1.简述:(多态)polymorphism
对于C++的多态性,这是一项很灵活的技术,用法十分灵巧,有难度;简单来说:多态性就是适当的使用接口函数,通过一个接口来使用多种方法,(相当于上级说一个命令,A,B,C,D等人都做出反应,一个命令,多个反应;
2.怎样实现多态性
1.采用虚函数和指针来实现多态性
通过虚函数来定义要实现的方法,通过基类的指针指向不同的子类的虚函数方法
2.多态性的优点是实现接口的重用
3.虚函数:
1.虚函数采用关键字virtual修饰,虚函数允许子类重新去定义成员函数;
2.重写(函数名一致,但是内容不一致)//又称覆盖(override)
3.重载(函数名一致,但是参数表列不一致)
4.多态性一般就是通过对虚函数进行重写,然后用基类指针指向不同的子对象,调用不同的虚函数
4.代码实现
- #include<iostream>
- #include<stdlib.h>
- #include<string>
- using namespace std;
- class Ishape
- {
- public:
- //多态性实现需要虚方法
- virtual double get_Area() = 0;
- virtual string get_Name() = 0;
- };
- //定义类1 CCircle
- class CCircle :public Ishape
- {
- //声明的时候需要带上Virtual关键字 显示多态性
- public:
- CCircle(double radius) {this->c_radius = radius;}
- CCircle(){}
- virtual double get_Area();
- virtual string get_Name();
- private:
- double c_radius;//定义圆的半径
- };
- //定义方法
- double CCircle::get_Area()
- {
- return 3.14*c_radius*c_radius;
- }
- string CCircle::get_Name()
- {
- return "CCircle";
- }
- class CRect :public Ishape
- {
- public:
- CRect(double length, double width) { this->m_length = length, this->m_width = width;}
- CRect(){};
- virtual double get_Area();
- virtual string get_Name();
- private:
- double m_length;
- double m_width;
- };
- double CRect::get_Area()
- {
- return m_length*m_width;
- }
- string CRect::get_Name()
- {
- return "Rectangle";
- }
- //通过指针指向不同的类从而使用不同的方法
- #include"text.h"
- void main()
- {
- <span style="white-space:pre;"> </span>Ishape *point = NULL;//建立指针
- <span style="white-space:pre;"> </span>point = new CCircle(10);
- <span style="white-space:pre;"> </span>//圆类
- <span style="white-space:pre;"> </span>cout << point->get_Name() << "的面积是:" << point->get_Area() << endl;
- <span style="white-space:pre;"> </span>delete point;
- <span style="white-space:pre;"> </span>//矩形类
- <span style="white-space:pre;"> </span>point = new CRect(10, 20);
- <span style="white-space:pre;"> </span>cout << point->get_Name() << "的面积是:" << point->get_Area() << endl;
- <span style="white-space:pre;"> </span>delete point;
- <span style="white-space:pre;"> </span>system("pause");
- }
- <span style="white-space:pre;"> </span>
- <span style="white-space:pre;"> </span>
- <span style="white-space:pre;"> </span>
- <span style="white-space:pre;"> </span>
上一篇: SQL Server游标
下一篇: 人工智能 其实还有点“笨”