C ++の三つの機能:カプセル化、継承、ポリモーフィズム。コードはモジュラーパッケージ、継承は、既存のコードを拡張することができ、および多形目的インターフェイスを再利用するようにしてもよいです。以下は、主にメインの多型を説明します。
多型とは何ですか
C ++多型が一つの文章である:基底クラス前に仮想キーワードを追加して、派生クラスは、この関数をオーバーライド、それは実行時にオブジェクトの実際の種類に応じて対応する機能を呼び出すであろう。
多型は、異なるオブジェクトまたは同一のメッセージを受信したときに異なるメッセージを受信し、同じ目的を達成するために、異なるアクションの産生を指します。C ++サポート2つの多型:コンパイル時のポリモーフィズム、実行時ポリモーフィズム。
a、编译时多态性(静态多态):通过重载函数实现
b、运行时多态性(动态多态):通过虚函数实现。
コンパイル時ポリモーフィズム:
また、あなたがコンパイルシステム中にプログラムを実行するためにどの機能を決定することができているコンパイル時のポリモーフィズム、として知られています。たとえば、次の算術演算子によって指定されたクラスメンバーをオーバーロード機能。
class A {
public:
A() {}
A( int x ) {}
void fun() {}
void fun( int x ) {}
};
class B {
public:
B() {}
void fun() {}
void fun( int x ) {}
};
ランタイムポリモーフィズム:
最も一般的な使用は、任意のサブクラスオブジェクトへのポインタを有する基底クラスのポインタの宣言にある、対応する仮想関数を呼び出す、有向異なるサブクラスに応じて異なる方法で達成することができます。時間がない仮想関数場合、対応する機能を使用して、基本クラスのポインタを呼び出しは常に基本クラス関数自体に限定され、書き換えのサブクラスに呼び出すことはできません。何多型が存在しないため、関数呼び出しのアドレスは一定となり、固定アドレスは常にインターフェイス、種々の方法の目的を実現することができない同じ関数の呼び出しであろう。
ポリモーフィック使い方
注意:
1、用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。
2、存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。
3、多态性是一个接口多种实现,是面向对象的核心,分为类的多态性和函数的多态性。
4、多态用虚函数来实现,结合动态绑定.
5、纯虚函数是虚函数再加上 = 0;
6、抽象类是指包括至少一个纯虚函数的类。
#include <iostream>
using namespace std;
class Base
{
public:
// 父类虚函数必须要有 virtual 关键字
virtual void fun_test()
{
cout << "parent class" << endl;
}
void test()
{
cout << "is parent" << endl;
}
};
class Derived : public Base
{
public:
// 子类有没有 virtual 关键字都可以
void fun_test()
{
cout << "child class" << endl;
}
};
int main(int argc, char const *argv[])
{
Base *p = NULL; // 创建一个父类的指针
Derived child;
p = &child; // 指向子类的对象
p->fun_test(); // 执行的是子类的 fun_test() 函数
return 0;
}
出力:
コンパイル時に、コンパイラは、基本クラスの仮想関数であり発見され、その後、コンパイラクラスは、それぞれの仮想機能(すなわちvtableの)仮想テーブルを作成すると、テーブル、アレイに格納されている一次元アレイであります各仮想関数のアドレス。
多型は、C ++仮想関数を実行することによって達成される、仮想関数は、そうでなければ書き換えとして知られている、再定義メンバ関数へのサブクラスは、サブクラスのアプローチは、カバー親クラス(上書き)として再定義を可能にします。
参考:
https://www.cnblogs.com/cxq0017/p/6074247.html