C ++功実務マニュアルXXII(多型)

C ++ 11番組キーワードオーバーライド:
派生クラスで唯一の修正仮想関数

アクション:コンパイラのヘルプ、ユーザーが派生クラスが基底クラスの仮想関数かどうかの仮想関数をオーバーライドする検出させます。
この時間はでコンパイルが主な役割は、基本クラスの仮想関数の手が派生クラスで関数名を間違って滑ったときに、そのユーザーが使用する基本クラスをオーバーライドするために、派生クラスとして機能します上書きを防ぐためのものですが、今回は結果が正確ではありません。

。++ 11 C:
最終キーワード
修飾クラスクラスを表すが継承することができない
クラスのサブクラスでは、仮想関数をオーバーライドとしての機能を継承することができないことを示す、機能修飾クラス。

そして、再定義を書き換え区別:
ここに画像を挿入説明
3.抽象クラスを:
= 0書き込み仮想関数の後に、この関数は純粋仮想関数です。抽象クラスと呼ばれる純粋仮想関数を含む(また、インターフェース・クラスと呼ばれる)、抽象クラスは、
オブジェクトをインスタンス化しません。派生クラスの後にのみオブジェクトをインスタンス化する純粋仮想関数、派生クラスをオーバーライドするオブジェクトインスタンスを継承することができません。ピュア
派生クラスの仮想関数が仕様をオーバーライドする必要があり、追加の純粋仮想関数は、インターフェイスの継承を反映しています。

#include<iostream>
using namespace std;
class WC
{
public:
	void GoToManRoom()const
	{
		cout << "go to left" << endl;
	}

	void GoToWoManRoom()const
	{
		cout << "go to right" << endl;
	}
};
class person   //抽象类,将人类给成抽象类的原因就是人类,并不知道男女,也就不知道应该去那个厕所
{
public:
	virtual void GoToWC(const WC& wc) = 0;  //纯虚函数
	string _name;
	int _age;
};
class man : public person
{
public:
	void GoToWC(const WC& wc)
	{
		wc.GoToManRoom();  //注意const成员只能调用const类型的成员函数
	}
};
class woman : public person
{
public:
	void GoToWC(const WC& wc)
	{
		wc.GoToWoManRoom();
	}
};
void test()
{
	WC wc;
	woman c1;
	c1.GoToWC(wc);
	man c2;
	c2.GoToWC(wc);
}
int main()
{
	test();
	return 0;
}

ここに画像を挿入説明
抽象クラスアクションは、後続のインタフェース仕様を達成しようとします

ここに画像を挿入説明
メモリベースの観察対象クラスへのオブジェクトモデルを使用します:
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明

仮想関数テーブルの存在を決定する
ここに画像を挿入説明
ここに画像を挿入説明
オブジェクトモデルの最初の4つのバイトを見つけるために、仮想関数テーブルを:
ここに画像を挿入説明
ここに画像を挿入説明
それはメモリ・オブジェクト・モデルを導入することができます
ここに画像を挿入説明

ここに画像を挿入説明
後のメモリモデルの研究が導出される
ここに画像を挿入説明
図は、基本クラスの仮想テーブルのクラスは、派生クラスの内容とない基本クラスの仮想関数の上書きと同じで誘導されます

下の写真は、親クラスの仮想関数のサブクラスでは、仮想テーブルの内容も変更され、書き換えられたある
ここに画像を挿入説明
派生クラスは、Moの基底クラスの仮想関数をオーバーライドする場合、その書き換え可能で、派生クラスを基底クラスの仮想関数をオフセット仮想関数テーブルを交換した後、

クラスが仮想関数を持っている場合、このクラスは、複数のオブジェクトから作成されている1と同じクラスは、仮想テーブルと下部に同じです

基本クラスで2.仮想機能を有する、派生クラスと基本クラスは、仮想テーブルを使用する前提が存在しない仮想関数の蓄積ので?仮想機能に関係している理由(、その後はポイントが存在しないであろう、同じではありませんvtableポインタ)

3.派生クラスと基本クラスは、ベースクラスの仮想関数の書き換えにかかわらずかどうかの派生クラスの、同じ仮想テーブルを使用決して

前記基底クラス、仮想関数の派生クラスは、派生クラスの仮想関数のアドレスを持つ仮想テーブルの同一のオフセット位置を覆うように、ベース・クラス、仮想関数が書き換えられた場合

5.派生クラスの仮想関数で新たな増加は、仮想テーブルの端に配置され、新しい仮想関数を追加するために、派生クラスの仮想関数に応じて、基本クラスの仮想関数テーブルのコピー後になる場合

ここに画像を挿入説明

================================================== ==================================

インサート:
ここに画像を挿入説明
結果:4つの
ここに画像を挿入説明
結果:1

公開された230元の記事 ウォン称賛28 ビュー9336

おすすめ

転載: blog.csdn.net/weixin_43767691/article/details/103144184
おすすめ