#include
class X{
public:
virtual void fun(int a = 0){cout << a;}
};
class Y: public X{
public:
virtual void fun(int a = 1) {cout << a;}
};
int main(){
X *px = new X;
px->fun(); // 0 шығарылады
X *py = new Y;
py->fun(); // 0 шығарылады
}
Виртуалды емес əдістерді туынды кластарда қайталап анықтау қажет
емес, себебі туынды кластар базалық кластардың қасиеттерін мұралап алуы
керек. Басқаша айтқанда, виртуалды емес əдіс специализацияға қатысты ин-
вариантты болып саналады, яғни туынды кластың қалай нақтыланатынына
тəуелсіз базалық кластан мұралануы тиіс қасиеттерді бойында сақтайды.
Туынды кластың специализациялануы жаңа əдістерді қосу жолымен жəне
бұрыннан бар виртуалды əдістерді қайта анықтау арқылы орындалады.
Мұралаудың негізгі артықшылығы – базалық класс деңгейінде əмбебап
код жазып, соның көмегімен виртуалды əдістер арқылы туынды кластардың
объектілерімен жұмыс жасауға болады.
Мұралауға альтернативті түрде бір кластың екінші класты пайдалануы
үшін енгізілген əдіс қабаттастыру болып табылады, мұнда бір класс басқа
бір кластың өрісі болып саналады:
Достарыңызбен бөлісу: |