C++-虚関数(virtual function)の使用範囲


虚関数(virtual function)の使用範囲
 
本住所:http://blog.csdn.net/caroline_wendy/article/details/15982647 
 
虚関数(virtual function)は、ベース関数(base function)と派生関数(derived function)の間で上書きすることができる.
派生関数に虚関数と同じ名前の関数がある場合は、虚関数は非表示になりますが、虚関数はまた表示されます.
派生オブジェクトとベースオブジェクトは変換できるため、ベースオブジェクト部分のみを使用できます.派生オブジェクトの虚関数は、ベースオブジェクトの虚関数を上書きします.
 
コード:
/*   * cppprimer.cpp   *   *  Created on: 2013.11.13   *      Author: Caroline   */    /*eclipse cdt, gcc 4.7.1*/    #include <iostream>    class Base {  public:  	virtual int fcn () { //     		std::cout << "This base class [int fcn()]. " << std::endl;  		return 0;  	}  };  class D1 : public Base {  public:  	int fcn (int) { //        ,          		std::cout << "This derived 1 class [int fcn(int)]. " << std::endl;  		return 0;  	}  	virtual void f2 () { //     		std::cout << "This derived 1 class [f2()]. " << std::endl;  	}  };  class D2 : public D1 {  public:  	int fcn (int) { //            		std::cout << "This derived 2 class [int fcn(int)]. " << std::endl;  		return 0;  	}  	int fcn () { //          		std::cout << "This derived 2 class [int fcn()]. " << std::endl;  		return 0;  	}  	void f2 () {  		std::cout << "This derived 2 class [f2()]. " << std::endl;  	}  };    int main (void) {    	Base bobj;  	D1 d1obj;  	D2 d2obj;    	Base *bp1 = &bobj, *bp2 = &d1obj, *bp3 = &d2obj;  	bp1->fcn();  	bp2->fcn(); //       ,           	bp3->fcn(); //D2            	D1 *d1p = &d1obj;  	D2 *d2p = &d2obj;  	d1p->f2();  	d2p->f2();    	D1 *p1 = &d2obj;  	D2 *p2 = &d2obj;  	p1->fcn(10);  	p2->fcn(10);    	return 0;    }      

 
出力:
This base class [int fcn()].   This base class [int fcn()].   This derived 2 class [int fcn()].   This derived 1 class [f2()].   This derived 2 class [f2()].   This derived 1 class [int fcn(int)].   This derived 2 class [int fcn(int)].