一个例子告诉你什么是封装,继承和多态(C++ 代码实例) (一)

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

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值