C ++中抽象类和纯抽象类有什么区别?

时间:2013-03-06 17:09:13

标签: c++ oop abstract-class abstraction

示例:

  

迭代器是纯粹的抽象:任何行为都像一个   迭代器是一个迭代器。

这是什么意思?

7 个答案:

答案 0 :(得分:27)

抽象类至少有一个纯虚函数。这是标准的C ++术语。

有些人使用术语纯抽象类来描述一个只有纯虚函数的类(换句话说,没有数据成员,没有具体的函数)。这相当于Java接口。

现在问你的实际问题:

  

迭代器是纯粹的抽象:任何行为类似于迭代器的东西都是迭代器。

这与抽象类(纯类或其他类)无关。所有它说的是,任何满足迭代器契约的东西都是迭代器。它甚至不必是一个类(想想指针)。

答案 1 :(得分:14)

无。 C ++标准仅声明a),如果一个类至少有一个纯虚函数,直接或继承,则该类是抽象的,并且b),您不能直接实例化抽象类。没有纯粹的抽象类。

答案 2 :(得分:5)

我认为纯抽象类是接口的C ++等价物。

请参阅here

  

纯Abstract类只有抽象成员函数而没有数据   或具体成员职能。一般来说,纯粹的抽象类是   用于定义接口并且旨在继承   具体课程。这是强迫班级之间签订合同的一种方式   设计师和该类的用户。这个类的用户必须   声明要编译的类的匹配成员函数。

答案 3 :(得分:5)

抽象类是一个具有某些功能的类,但有些需要实现,而纯抽象类没有实现其功能。

这有点像其他语言的接口,例如C#和Java。

纯抽象类的目的是指定一个'合同'纯抽象类的结构必须坚持。

答案 4 :(得分:1)

抽象类 *至少有一个纯虚函数,可以有数据成员。

纯抽象类 就像 界面 此处只能定义纯虚函数。这里没有数据成员或方法定义。

有关详细信息,请访问:(https://en.wikibooks.org/wiki/C%2B%2B_Programming/Classes/Abstract_Classes/Pure_Abstract_Classes

答案 5 :(得分:0)

在C ++中,没有纯粹的抽象类。只有抽象类和纯虚函数(函数标记为= 0)。具有至少一个纯虚函数的类变为抽象。但是纯虚函数可以实现。

答案 6 :(得分:0)

在您的示例中,您正在谈论 Iterators 。在C ++中,更具体地说,在标准库中,术语 Iterators 并不是指纯粹的抽象类,而是指所谓的 concepts 。概念与模板一起使用,而不是与基于虚拟/继承的多态性一起使用。目前(C ++ 11),概念仅在库文档中定义,即它们(尚未)作为C ++语言本身的一部分存在。标准库文档概念,例如" Iterator"概念,作为一组需求,用于任何类型/对象被接受为希望使用" Iterator"的模板的类型参数。根据哪些表达式对对象有效来定义一组需求,而不管其类型如何。它是鸭子打字的一种形式。例如,请参阅:http://en.cppreference.com/w/cpp/concept/Iterator