通常のメソッド(C++)
コンポーネント開発者のためのオブジェクト指向プログラミング:インデックス への移動
メソッドを virtual 宣言したり,基本クラスの virtual メソッドをオーバーライドしない限り,すべてのメソッドは通常の,非仮想メソッドになります。コンパイラは通常のクラスメンバーの正確なアドレスを決定します。これをコンパイル時バインドと呼びます。
基本クラスのレギュラーメソッドは,派生クラスによって継承されます。次の例では,Derived 型のオブジェクトは,Regular() メソッドを自分自身に属するメソッドであるかのように呼び出せます。 派生クラス内で,その上位クラス内のレギュラーメソッドと同じ名前およびパラメータを持つメソッドを宣言して,上位クラスのメソッドを置換します。次の例では,d->AnotherRegular() メソッドが呼び出されると,Derived クラスの AnotherRegular() メソッドの置換がディスパッチされます。
class Base
{
public:
void Regular();
void AnotherRegular();
virtual void Virtual();
};
class Derived : public Base
{
public:
void AnotherRegular(); // Base::AnotherRegular() を置き換えます
void Virtual(); // Base::Virtual() をオーバーライドします
};
void FunctionOne()
{
Derived *d;
d = new Derived;
d->Regular(); // Derived クラスのメンバーであるかのように Regular() を呼び出します
// d->Base::Regular() の呼び出しと同じ
d->AnotherRegular(); // 再定義された AnotherRegular() の呼び出し ...
// ... Base::AnotherRegular() を置き換えます
delete d;
}
void FunctionTwo(Base *b)
{
b->Virtual();
b->AnotherRegular();
}