2018/5/13
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()
{
Ishape *point = NULL;//建立指针
point = new CCircle(10);
//圆类
cout << point->get_Name() << "的面积是:" << point->get_Area() << endl;
delete point;
//矩形类
point = new CRect(10, 20);
cout << point->get_Name() << "的面积是:" << point->get_Area() << endl;
delete point;
system("pause");
}