C ++多型(B)---抽象クラスと新しいC ++ 11

C ++多型

抽象クラス

定義

オブジェクト指向の概念では、すべてのオブジェクトは逆に、ではないすべてのクラスのクラスは特定を記述するための十分な情報が含まれていない場合は、オブジェクトを記述するために使用され、クラスによって記述されているが、オブジェクト、そのようなクラスは抽象クラスです。
抽象クラスの機能を実現する方法で、C ++、純粋仮想関数

C ++クラスの実装抽象的な方法

純粋仮想関数の後ろに= 0を維持するために、この関数は純粋仮想関数です。純粋仮想関数を含有する抽象クラスではないインスタンス化オブジェクトを行い、抽象クラス(インターフェースクラス)と呼ばれる特別な抽象クラスメソッドは、そうオブジェクトをインスタンス化しないので、唯一の基地継承オブジェクトをインスタンス化することができないクラスを派生した後クラス抽象クラスは、オブジェクトをインスタンス化するよりも優先されます。

class A
{
	virtual void Func() = 0;
};

int main()
{
	A a; //error
}

ここに画像を挿入説明
抽象的多重継承

class A
{
	virtual void Func() = 0;
};

class B : public A
{
public:
	virtual void Func()
	{
		cout << "virtual B::Func()" << endl;
	}
};

int main()
{
	B b;
}

C ++ 11個の新機能

オーバーライド&決勝
  • 変更された仮想関数のオーバーライドを使用している場合:変更された派生クラスの仮想関数テーブルは、強制的に仮想関数をオーバーライドします
class A
{
public:
	virtual void Func() = 0;
};

class B : public A
{
public:
	virtual void Func() override //表示强制重写虚函数
	{
		cout << "virtual B::Func()" << endl;
	}
};

int main()
{
	A *b = new B();
	b->Func(); //编译器会首先检测其静态类型是否合法
}
  • :最終修正仮想関数を使用する場合派生クラスでオーバーライドすることはできません仮想関数の修正を表します
class A
{
public:
	virtual void Func() = 0;
};

class B : public A
{
public:
	virtual void Func() final //表示禁止再被重写
	{
		cout << "virtual B::Func()" << endl;
	}
};

class C : public B
{
public:
	virtual void Func() //error
	{
		cout << "virtual C::Func()" << endl;
	}
};

ここに画像を挿入説明

公開された52元の記事 ウォン称賛26 ビュー3410

おすすめ

転載: blog.csdn.net/weixin_43796685/article/details/103648559