1.何が抽象クラスであります
。現実世界の抽象表現するために使用さ
bは。唯一の定義型ですが、クラスのオブジェクトを生成することはできません
Cを。唯一の継承可能な相関関数を書き換えている(あなたができる、唯一の継承に、オブジェクトを作成できません。 )ポインタを定義するために使用される
直接請求D. 相関関数は、完全な実装をしません
純粋仮想関数を持つ2.抽象クラス
a.c ++言語は、抽象クラスの概念がありません
純粋に抽象クラスの仮想関数によって達成b.c ++
、Cを。純粋仮想関数のみプロトタイプメンバ関数のために定義される
D。C ++クラスの純粋仮想関数がこのクラスになった存在である限り、抽象クラス
など。
純粋仮想関数の構文規則:
class Shape
{
public:
virtaul double area () = 0;
};
//这里" = 0"用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体
例えば:
#include <iostream>
#include <string>
using namespace std;
class Shape
{
public:
virtual double area () = 0;
};
class Rect : public Shape
{
int ma;
int mb;
public:
Rect (int a, int b)
{
ma = a;
mb = b;
}
double area ()
{
return ma * mb;
}
};
class Circle : public Shape
{
int mr;
public:
Circle (int r)
{
mr = r;
}
double area ()
{
return 3.14 * mr * mr;
}
};
void area (Shape* p) // 抽象类可以定义指针
{
double r = p->area(); // Shape的纯虚函数,没有实现。但这里调用的是子类中实现的虚函数
// 因为子类中实现了父类中的纯虚函数,所以这里才能调用
cout << "r = " << r << endl;
}
int main()
{
Rect rect (1, 2);
Circle circle(10);
area(&rect);
area(&circle);
return 0;
}
3.インタフェース
クラスは、変数の任意のメンバー定義していません
Bを。すべてのメンバ関数が公開され
、C。すべてのメンバ関数、純粋仮想関数がされている
日間。インターフェイス抽象クラスは特別です
例えば:
class Channel
{
public:
virtual bool open () = 0;
virtual void close () = 0;
virtual bool send (char* buf, int len) = 0;
virtual int receive (char* buf, int len); = 0;
};