【问题标题】:How this program implements the concept of abstraction? [duplicate]这个程序如何实现抽象的概念? [复制]
【发布时间】:2013-02-02 01:19:14
【问题描述】:

今天我在搜索抽象,得到了这个例子……这个程序是如何实现抽象的概念的,请详细说明c++中的抽象是什么

 #include <iostream>
using namespace std;

class Adder{
   public:
      // constructor
      Adder(int i = 0)
  {
    total = i;
  }
  // interface to outside world
  void addNum(int number)
  {
      total += number;
  }
  // interface to outside world
  int getTotal()
  {
      return total;
  };
  private:
  // hidden data from outside world
  int total;
};
int main( )
{
Adder a;

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

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

【问题讨论】:

  • 您找到了一个声称实现“抽象概念”但没有说明任何内容的程序?你在哪里找到它?如果一开始没有提到,你怎么知道它确实实现了“抽象概念”?
  • 示例前好像有一整段文字。您错过或不了解哪些信息?
  • 我无法区分数据抽象和数据封装,两者看起来都一样。
  • @vikJ:这两者没有任何关系。再次阅读材料。

标签: c++ abstraction


【解决方案1】:

应该叫data abstraction,是OOP的关键源(不限于C++)。

引自维基百科:

数据抽象强制抽象之间的明确分离 数据类型的属性及其具体细节 实施。

在您的示例中,Adder 是加法器的数据抽象,它有两个接口:addNumgetTotal。这种抽象隐藏(或封装)私有数据(在这种情况下为total),只暴露其内核行为:添加一个数字并返回当前总和。

【讨论】:

  • 好的....我现在明白了w......谢谢:)
【解决方案2】:

您正在访问public 方法来完成您的任务,但不知道private members 会受到怎样的影响。这不过是abstraction

你在移动你的手,却不知道你的思想是如何指示它移动的。

Data Abstraction:隐藏不必要的细节。在您的情况下,您隐藏了 total 的计算方式。您只需调用该函数即可完成任务。

Data Encapsulation:将dataobject 绑定。在您的情况下,您将totalobject a 绑定。所以没有a 许可就无法访问它。

【讨论】:

    【解决方案3】:

    只考虑构造函数和函数原型:

    class Adder {
      Adder(int i);
      void AddNum(int num);
      int getTotal();
    };
    

    实现被隐藏、抽象出来,只剩下原型。

    【讨论】:

      猜你喜欢
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多