接口(抽象类),数据抽象,数据封装

接口(抽象类)

参学:http://www.runoob.com/cplusplus/cpp-interfaces.html

1.什么是接口?
接口描述了类的行为和功能,而不需要完成类的特定实现。

C++ 接口是使用抽象类来实现的,注意抽象类与数据抽象的区别。
如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。

纯虚函数是通过在声明中使用 “= 0” 来指定的,如下所示:

class Box
{
   public:
      // 纯虚函数
      virtual double getVolume() = 0;
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};

2.具体代码:
1).面向对象的系统可能会使用一个抽象基类为所有的外部应用程序提供一个适当的、通用的、标准化的接口。然后,派生类通过继承抽象基类,就把所有类似的操作都继承下来。
2).外部应用程序提供的功能(即公有函数)在抽象基类中是以纯虚函数的形式存在的。这些纯虚函数在相应的派生类中被实现

#include <iostream> 
using namespace std;
// 基类
/***********************************************************/
class Shape 
{
    public:
       virtual int getArea() = 0;  //提供接口框架的纯虚函数
       void setWidth(int w)
       {
          width = w;
       }
       void setHeight(int h)
       {
          height = h;
       }
    protected:
       int width;
       int height;
};
/***********************************************************/ 
// 派生类,怎么实现!
class Rectangle: public Shape
{
    public:
       int getArea()  //怎么去实现接口
       { 
          return (width * height); 
       }
};
class Triangle: public Shape
{
    public:
       int getArea()  //怎么去实现接口
       { 
          return (width * height)/2; 
       }
};

int main(void)
{
   Rectangle Rect;
   Triangle  Tri;

   Rect.setWidth(5);
   Rect.setHeight(7);
   // 输出对象的面积
   cout << "Total Rectangle area: " << Rect.getArea() << endl;//35

   Tri.setWidth(5);
   Tri.setHeight(7);
   // 输出对象的面积
   cout << "Total Triangle area: " << Tri.getArea() << endl; //17
   return 0;
}
/*
从上面的实例中,我们可以看到一个抽象类是如何定义一个接口 getArea(),
两个派生类是如何通过不同的计算面积的算法来实现这个相同的函数。
*/

数据抽象

参学:http://www.runoob.com/cplusplus/cpp-data-abstraction.html

1.数据抽象和数据封装的区别:

1.) 数据抽象是一个把实现细节与相关的数据分离开的概念;
2.) 数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制;
3.)数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细 节。
4.) 数据封装是一种把数据和操作数据的函数捆绑在一起的机制;

2.代码

#include <iostream>
using namespace std;
int main( )
{
   cout << "Hello C++" <<endl;
   return 0;
}
/*
在这里,您不需要理解 cout 是如何在用户的屏幕上显示文本。
您只需要知道公共接口即可,cout 的底层实现可以自由改变
*/

数据封装

参学:http://www.runoob.com/cplusplus/cpp-data-encapsulation.html

这里写图片描述
1.代码

class Box
{
   public:
      double getVolume(void)
      {
         return length * breadth * height;
      }
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值