C++-虚関数(virtual function)の使用範囲
虚関数(virtual function)の使用範囲
本住所:http://blog.csdn.net/caroline_wendy/article/details/15982647
虚関数(virtual function)は、ベース関数(base function)と派生関数(derived 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)].