سلام!
در این جلسه می خواهیم توابع موجود در کلاس پایه و سطح دسترسی به عضوهای کلاس پایه را تغییر دهیم.
فرض کنید در کلاس پایه ی خود یک تابع به نام test دارید و در کلاس وارث چنین تابعی ندارید. اگر در برنامه ی خود بنویسید
Derived_Obj.test();
کامپایلر ابتدا در خود کلاس وارث دنبال تابع test می گردد و اگر پیدا نکند، در زنجیره ی ارث بری به سمت بالا حرکت می کند تا چنین تابعی را پیدا کند. حالا کد زیر را در نظر بگیرید. همان طور که می بینید، تابع identify را چه با کلاس پایه و چه با کلاس وارث صدا بزنیم، یک تابع صدا زده می شود و آن هم تابع identify در کلاس پایه است.
#include <iostream>
using namespace std;
class Base{
protected:
int foo;
public:
Base( int value = 0 ) : foo( value ) {}
void identify();
};
void Base::identify(){
cout << "Base!\n";
}
class Derived : public Base{
public:
Derived( int value = 0 ) : Base( value ) {}
};
int main(){
Base base;
base.identify();
Derived derived;
derived.identify();
}
این نکته که بدیهی بود، حالا می خواهیم این تابع را تغییر دهیم.