虚関数の紹介
2116 ワード
#include "stdafx.h"
#include <iostream>
using namespace std;
class B0 // B0
{public: //
virtual void display() //
{cout<<"B0::display()"<<endl;}
};
class B1: public B0 //
{ public:
void display() { cout<<"B1::display()"<<endl; }
};
class D1: public B1 //
{ public:
void display() { cout<<"D1::display()"<<endl; }
};
void fun(B0 *ptr) //
{ ptr->display(); }
int _tmain(int argc, _TCHAR* argv[])
{
B0 b0, *p; //
B1 b1; //
D1 d1; //
p=&b0;
fun(p); // B0
p=&b1;
fun(p); // B1
p=&d1;
fun(p); // D1
return 0;
}
虚関数の利点は、コードを書くと、基本的にコードを変更する必要はありません.共通のクラスの中には、異なる条件に基づいて異なるサブクラスオブジェクトをインスタンス化するものがあります.ここでは、親ポインタとしてこの虚メソッドを指すだけで、将来的にはサブクラスが再実現されます.共通のクラスの中の条件が新しく実現したサブクラス虚関数の条件を満たすだけでよい.他の場所に条件を書いたほうがいいです.そうすれば、共通コードは動かなくてもいいです.主に虚関数であり,親クラスのポインタで虚メソッドを指し,子クラスの虚メソッドを実現する.
親クラスが虚メソッドとして定義されている限り、子クラスは宣言しても宣言しなくても虚メソッドです.new 1つのオブジェクトがそのオブジェクトを共通の方法に伝えると,この方法では一連の操作が実現される.サブクラスの中の虚の方法が多い.操作も多く、メリットも明らかです.
class() a1
{public:
virsual void fun1(){}
virsual void fun2(){}
virsual void fun3(){}
};
class() b1 public:a1
{public:
void fun1(){-----}
void fun2(){----}
void fun3(){----}
};
class() c1 public:a1
{public:
void fun1(){-----}
void fun2(){----}
void fun3(){----}
};
class() common
{public:
void com(a1* aa){
aa->fun1();
aa->fun2();
aa->fun3();
}
} ;
class() other
{public:
void work()
{
b1 bb = new b1;
common co ;
co.com(bb );
}
};