14

例:

イテレータは純粋な抽象化です。イテレータのように動作するものはすべてイテレータです。

どういう意味ですか?

4

7 に答える 7

30

抽象クラスには、少なくとも1つの純粋仮想関数があります。これは標準のC++用語です。

一部の人々は、純粋抽象クラスという用語を使用して、純粋仮想関数しか持たない(つまり、データメンバーも具体的な関数もない)クラスを説明します。これはJavaインターフェースと同等です。

今あなたの実際の質問に:

イテレータは純粋な抽象化です。イテレータのように動作するものはすべてイテレータです。

これは、抽象クラス(純粋またはその他)とは何の関係もありません。イテレータ契約を満たすものはすべてイテレータであると言っているだけです。クラスである必要はありません(ポインタを考えてください)。

于 2013-03-06T17:11:29.557 に答える
14

何もない。C ++標準では、a)直接または継承された純粋仮想関数が少なくとも1つある場合、クラスは抽象であり、b)抽象クラスを直接インスタンス化することはできないとのみ規定されています。純粋な抽象クラスのようなものはありません。

于 2013-03-06T17:12:17.350 に答える
5

純粋な抽象クラスは、C++でインターフェイスに相当すると思います。

ここを参照してください:

純粋なAbstractクラスには、抽象メンバー関数のみがあり、データや具象メンバー関数はありません。一般に、純粋な抽象クラスはインターフェースを定義するために使用され、具象クラスによって継承されることを目的としています。これは、クラス設計者とそのクラスのユーザーとの間で契約を強制する方法です。このクラスのユーザーは、クラスをコンパイルするために一致するメンバー関数を宣言する必要があります。

于 2013-03-06T17:12:09.887 に答える
5

抽象クラスは、いくつかの機能を備えたクラスですが、実装する必要のあるクラスもありますが、純粋な抽象クラスには、その機能が実装されていません。

これは、C#やJavaなどの他の言語のインターフェイスに少し似ています。

純粋な抽象クラスは、純粋な抽象クラスの具体化が順守しなければならない「コントラクト」を指定する目的を果たします。

于 2013-03-06T17:12:56.230 に答える
2

抽象クラス*は少なくとも1つの純粋仮想関数を持ち、データメンバーを持つことができます。

純粋な抽象クラスは、 インターフェイスのようなもの です。ここで定義できるのは、純粋仮想関数のみです。ここでは、データメンバーやメソッドの定義を行うことはできません。

詳細については、次を参照してください:(https://en.wikibooks.org/wiki/C%2B%2B_Programming/Classes/Abstract_Classes/Pure_Abstract_Classes

于 2013-03-06T17:47:07.907 に答える
0

C ++には、純粋な抽象クラスはありません。抽象クラスと純粋仮想関数のみがあります(関数は= 0でマークされています)。少なくとも1つの純粋仮想関数を持つクラスは抽象になります。ただし、純粋仮想関数は実装できます。

于 2013-03-06T17:17:42.847 に答える
0

あなたの例では、イテレータについて話している。C ++、より具体的には標準ライブラリでは、イテレータという用語は純粋な抽象クラスではなく、概念と呼ばれるものを指します。概念は、仮想/継承ベースのポリモーフィズムではなく、テンプレートで使用されます。現在(C ++ 11)、概念はライブラリドキュメントでのみ定義されています。つまり、C ++言語自体の一部として(まだ)存在していません。標準ライブラリは、一連の要件として、「Iterator」の概念などの概念を文書化します。「イテレータ」を操作するテンプレートのタイプパラメータとして受け入れられるタイプ/オブジェクト。一連の要件は、オブジェクトのタイプに関係なく、オブジェクトで有効な式に関して定義されます。これは、ダックタイピングの一種です。たとえば、次を参照してください:http: //en.cppreference.com/w/cpp/concept/Iterator

于 2014-05-16T22:25:13.060 に答える