C++何为数据抽象呢?请高手们帮忙详细回答一下

2024-12-31 17:05:27
推荐回答(3个)
回答1:

抽象有两种, 一种是数据抽象, 一种是行为抽象.
行为抽象是C++最重要的机制之一.

数据抽象:
int i = 5 ; // 你把5表示5个苹果, 5倍关系等等, 这就是数据抽象.
// 用数据去表示事物,概念,关系

行为抽象:
比如, 任何表现出迭代器行为的东西都是迭代器, 来自<>里的原话

所以vector<>::iterator是迭代器, list<>::iterator是迭代器, 指针int* p也是迭代器
迭代器有哪些行为?
有解引用操作, 如*iter = 10,
有成员访问操作 iter->func(),
有递增操作 ++iter
所以只要你定义一个类, 支持上述操作, 你的类就是一个迭代器, 如果你的类同时又具有容器的行为, 你的类也可以叫做容器. 当然这种异型不太可能生存在有意义的软件环境中.

在C++中行为抽象一般有两种实现机制:

在面向对象的编程中, 使用接口
通常定义一个抽象类作为接口, 比如 class shape{ virtual void draw() ;}
任何继承该接口的子类, 都强制性的具有draw()行为, 所以任何子类都可叫做shape

在泛型编程中, 通常使用策略
策略是隐式接口, 在C/C++其实就等于convention(约定), 比如我们约定变量i开头表示int类型
template< typename T>
void draw( const T& sp )
{
sp.draw() ; // 由于策略是隐式的, 只要求T具有draw()行为, 而不要求T之间有任何继承关系
}

抽象 = 提取共性, 忽略无关
所以
class polymorph
{
void draw() ; // polymorth是一个shape, 因为图形的行为共性是draw()
// 图形或许还有move(), scale()行为, 但是在这里我们忽略掉, 对我们不重要
void drive() ; // polymorth是一部汽车, 因为汽车的行为共性是drive()
// 汽车还有stop(),但是...
} ;

回答2:

数据的抽象简单的说吧就是把共性提出来,比如说我们形容一个人的时候我们需要从他的五官等等方面来考虑,但是这些东西或说属性是每个人都共有的,只有具体到每个人的时候才不一样,因此把这些大家都有的抽象出来分装起来就形成了C++的类,其实这是一种思想和语言本身没有关系,C一样可以有这种思想,就是我们熟悉的结构体,他对应的是想法而不是语言

回答3:

就是类的思想吧,提取事物的共性,抽象出类。