前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 数据抽象、封装、接口《Rice C++ 学习开发》

C++ 数据抽象、封装、接口《Rice C++ 学习开发》

作者头像
Rice加饭
发布2022-05-09 21:31:16
4910
发布2022-05-09 21:31:16
举报
文章被收录于专栏:Rice嵌入式

上一篇文章讲解了多态、虚函数、纯虚函数。这一篇文章来讲讲C++的数据抽象、封装、接口。

C++数据抽象

只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。是一种依赖于接口和实现分离的编程(设计)技术。

比喻:一台计算器,你要计算两个数字相加,你只需要向计算机输入两个数字,然后返回两个数字的和。而至于两个数字如何相加的,你完美不用关心,只关心最后你要的关键信息。

例程:

代码语言:javascript
复制
class Adder {
public:
  void addNum(int number)
{
    total += number;
  }
  int getTotal()
{
    return total;
  };
private:
  int total;
};
int main()
{
  Adder a;

  a.addNum(10);
  a.addNum(20);

  cout << "Total " << a.getTotal() << endl;
  return 0;
}

注意:

1.类的内部受到保护,不会因无意的用户级错误导致对象状态受损。

2.类实现可能随着时间的推移而发生变化,以便应对不断变化的需求,或者应对那些要求不改变用户级代码的错误报告。

C++封装

把数据和操作数据的函数绑定在一起,这样能避免受到外界的干扰和误用,即数据隐藏。面向对象理念是万物皆对象,都有其特征和行为,我们把“成员变量”理解为特征,把“成员函数”理解为行为。被封装的特性只能通过特定的行为去访问。

比喻:一个计算器,你只能看到他的外观,但是你没法看到内部的电路板等,它被封装到外壳内部,如果不进行封装,那么电路板就会裸露在外面,那么电路板就会因为外部环境,比如潮湿天气等,使其氧化受损。

例程:

代码语言:javascript
复制
class Box
{
public:
  double getVolume(void)
  {
    return length * breadth * height;
  }
private:
  double length;
  double breadth; 
  double height;
};

C++接口(抽象类)

接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。

比喻:描述猪有白猪,黑猪,山猪等,则猪就这些的抽象,所有猪的共同特征有毛,牙齿,尾巴等,而这些就是接口。而具体毛的颜色,尾巴是怎么样是猪的类型决定,所以由各自实现,也就是由子类来实现。

例程:

代码语言:javascript
复制
class Shape {
protected:
  int width, height;
public:
  Shape(int a = 0, int b = 0)
  {
    width = a;
    height = b;
  }
  virtual int area() = 0;
};
class Rectangle : public Shape {
public:
  Rectangle(int a = 0, int b = 0) :Shape(a, b) { }
  int area()
{
    cout << "Rectangle class area :" << endl;
    return (width * height);
  }
};

int main()
{
  Shape *shape;
  Rectangle rec(10, 7);
  shape = &rec;
  shape->area();

  return 0;
}

注意:

1.抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误

2.如果没有在派生类中重写纯虚函数,就尝试实例化该类的对象,会导致编译错误。

3.可用于实例化对象的类被称为具体类

总结:

通过三篇文章总结C++面向对象的一些概念,以及注意事项。那么C++有什么作用?其实C++可以通过Qt做UI软件,Linux的应用开发,服务器等。后续继续更新C++的高级功能部分。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档