add by WJB date 2018/08/30
面向对象的三大特性:封装,继承和多态;
封装:将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系。
继承:子类可以拥有父类的属性和方法;
多态:以说是“一个接口,多种实现”或者说是父类的引用变量可以指向子类的实例,被引用对象的类型决定调用谁的方法,但这个方法必须在父类中定义
定义五花八门,所以定义不重要,重在理解和应用,接下来我们通过实例来说明这三个特性;
如果面试官给你一个问题,请实现加、减、乘和除四个功能;
第一种最简便的方法,三个特性一个也没有体现……
//main.cpp
double PlusMethod(double param1,double param2)
{
return param1+param2;
}
double MinusMethod(double param1,double param2)
{
return param1-param2;
}
double MultyMethod(double param1,double param2)
{
return param1*param2;
}
double DividMethod(double param1,double param2)
{
if(param2==0)
{
return 0;
}
return param1/param2;
}
main()
{
double result ;
result =PlusMethod(2,3);
result =MinusMethod(2,3);
result =MultyMethod(2,3);
result =DividMethod(2,3);
}
第二种方法,体现封装的特性;封装就是抽象出类,类含有属性和方法
封装的好处就是代码功能分离;代码清晰易读;
我们封装一个MyMath类
//MyMath.h
class MyMath
{
public:
MyMath();
~MyMath();
public:
static double PlusMethod(double param1, double param2);
static double MinusMethod(double param1, double param2);
static double MultyMethod(double param1, double param2);
static double DividMethod(double param1, double param2);
};
//MyMath.cpp
#include "MyMath.h"
MyMath::MyMath()
{
}
MyMath::~MyMath()
{
}
double MyMath::PlusMethod(double param1, double param2)
{
return param1+ param2;
}
double MyMath::MinusMethod(double param1, double param2)
{
return param1-param2;
}
double MyMath::MultyMethod(double param1, double param2)
{
return param1*param2;
}
double MyMath::DividMethod(double param1, double param2)
{
if (param2==0)
{
return 0;
}
return param1 / param2;
}
//main.cpp
#include "MyMath.h"
int main()
{
double result;
result = MyMath::PlusMethod(2, 3);
result = MyMath::MinusMethod(2, 3);
result = MyMath::MultyMethod(2, 3);
result = MyMath::DividMethod(2, 3);
return 0;
}
第三种方法:体现封装和继承
继承的优势是 代码复用高;
创建基类或者说父类 Operation ;
注意:
1,基类的析构函数必须为虚函数
2,成员变量要初始化
//Operation.h
class Operation
{
public:
Operation();
virtual ~Operation();
virtual void SetFirstNum(double param);
virtual void SetSecondNum(double param);
protected:
double m_firstNum;
double m_SecondNum;
};
//Operation.cpp
#include "Operation.h"
Operation::Operation():
m_firstNum(0), m_SecondNum(0)
{
}
Operation::~Operation()
{
}
void Operation::SetFirstNum(double param)
{
m_firstNum = param;
}
void Operation::SetSecondNum(double param)
{
m_SecondNum = param;
}
接下来 创加减乘除四个类;这里仅写加和减两个类,其余两个类相似。
加法类
//MyMinusFunc.h
#include "Operation.h"
class MyMinusFunc:public Operation
{
public:
MyMinusFunc();
~MyMinusFunc();
double GetResult();
};
//MyMinusFunc.cpp
#include "MyMinusFunc.h"
MyMinusFunc::MyMinusFunc()
{
}
MyMinusFunc::~MyMinusFunc()
{
}
double MyMinusFunc::GetResult()
{
return m_firstNum - m_SecondNum;
}
减法类:
//MyPlusFunc.h
#include "Operation.h"
class MyPlusFunc:public Operation
{
public:
MyPlusFunc();
~MyPlusFunc();
double GetResult();
};
//MyPlusFunc.cpp
#include "MyPlusFunc.h"
MyPlusFunc::MyPlusFunc()
{
}
MyPlusFunc::~MyPlusFunc()
{
}
double MyPlusFunc::GetResult()
{
return m_firstNum + m_SecondNum;
}
//main.cpp
#include "MyMath.h"
#include "MyPlusFunc.h"
#include "MyMinusFunc.h"
int main()
{
double result;
result = MyMath::PlusMethod(2, 3);
result = MyMath::MinusMethod(2, 3);
result = MyMath::MultyMethod(2, 3);
result = MyMath::DividMethod(2, 3);
MyMinusFunc minus;
minus.SetFirstNum(3);
minus.SetSecondNum(2);
result= minus.GetResult();
MyPlusFunc plus;
plus.SetFirstNum(3);
plus.SetSecondNum(2);
result = plus.GetResult();
return 0;
}
这个实例很明白的说明了继承的特性,代码复用也是显而易见地;
这篇太长了 多态的特性在下篇讲,请继续关注……
程序源码 下载 https://download.csdn.net/download/wangjianbo09/10636627