C++ இல் உள்ள எடுத்துக்காட்டு நிரல்கள் - C++: அடிப்படை இனக்குழுவின் செயற்கூறுகளை தருவிக்கப்பட்ட இனக்குழுவில் மேனிடல் / நிழலிடல் | 11th Computer Science : Chapter 16 : Inheritance
அடிப்படை இனக்குழுவின் செயற்கூறுகளை தருவிக்கப்பட்ட இனக்குழுவில் மேனிடல் / நிழலிடல் (Overriding Shadowing)
மரபுரிமத்தில், சில சமயங்களில் அடிப்படை இனக்குழுக்களும், தருவிக்கப்பட்ட இனக்குழுக்களும் ஒரே பெயரில் உறுப்பு செயற்கூறினை பெற்றிருக்க முடியும். தருவிக்கப்பட்ட இனக்குழுவின் பொருள் பணி மிகுக்கப்பட்ட உறுப்பு செயற்கூறினை அழைக்கும் போது எந்த செயற்கூறினை செயல்படுத்துவது என்ற குழப்பத்தினை நிரல் பெயர்ப்பிக்கு ஏற்படுத்துகிறது. தருவிக்கப்பட்ட இனக்குழுவின் உறுப்பு செயற்கூறினுக்கு அடிப்படை இனக்குழு உறுப்பு செயற்கூறினை காட்டிலும் அதிக முன்னுரிமை உள்ளது. அடிப்படை இனக்குழுவின் உறுப்பு செயற்கூறுகள் தருவிக்கப்பட்ட இனக்குழுவின் உறுப்புச் செயற்கூறுகளின் பெயரை கொண்டிருந்தால், அது அடிப்படை இனக்குழுவின் உறுப்பு செயற்கூறுகளின் நிழலாக கருதப்படுகிறது. வரையெல்லை தீர்மானிப்பு செய்குறி (::) கொண்டு இந்த சிக்கலை தீர்க்கலாம்.
எடுத்துக்காட்டு நிரல் 16.11 தருவிக்கப்பட்ட இனக்குழுவில் வரையெல்லை தீர்மானிப்பு செயற்குறியின் பயன்பாட்டை விளக்குகிறது.
#include<iostream>
#include<string>
using namespace std;
class Employee
{
private:
char name[50];
int code;
public:
void getdata();
void display();
};
class staff: public Employee
{
private:
int ex;
public:
void getdata();
void display();
};
void Employee::display()
{
cout<<"Name:"<<name<<endl;
cout<<"Code:"<<code<<endl;
}
void staff::display()
{
Employee :: display();//overriding
cout<<"Experience:"<<ex<<" Years"<<endl;
}
int main()
{
staff s;
cout<<"Enter data"<<endl;
s.getdata();
cout<<endl<<endl<<"\tDisplay Data"<<endl;
s.display();
return 0;
}
வெளியீடு:
Enter data
Name: SUGANYA
Code: 1201
Experience: 30
Display Data
Name: SUGANYA
Code:1201
Experience:30 Years
மேற்கண்ட நிரலில் getdata() மற்றும் display() என்ற இரண்டு செயற்கூறுகளும் அடிப்படை இனக்குழு மற்றும் தருவிக்கப்பட்ட இனக்குழுவில் வரையறுக்கப்பட்டிருக்கிறது. எனவே, தருவிக்கப்பட்ட இனக்குழு "staff'' "employee” இனக்குழுவின் பண்புக்கூறுகளை மரபுவழி பெறும் போது, அது இரண்டு getdata() மற்றும் display() கொண்டிருக்கும். வரையெல்லை தீர்மானிப்பு செயற்குறியை (:) கொண்டு தருவிக்கப்பட்ட getdata(), display() செயற்கூறினையும், வரையறுக்கப்பட்ட getdata(), display() என்ற செயற்கூறினையும் வேறுபடுத்திக்காட்டலாம். இந்த செயற்குறியை அடிப்படை இனக்குழுவின் பெயருக்கும் உறுப்பு செயற்கூறின் பெயருக்கும் நடுவில் கொடுக்கப்பட வேண்டும்.
குறிப்பு
தருவிக்கப்பட்ட இனக்குழுவின் உறுப்பு செயற்கூறும், அடிப்படை இனக்குழுவின் உறுப்பு செயற்கூறும் ஒரே பெயரை பெற்றிருந்தால், தருவிக்கப்பட்ட இனக்குழுவின் உறுப்பு செயற்கூறுகள் அடிப்படை இனக்குழுவின் மரபுவழி பெறப்பட்ட செயற்கூறுகளை நிழலிடும் மறைக்கும். இதை செயற்கூறு மேலிடல் என்கிறோம். இந்த சிக்கலை தீர்க்க அடிப்படை இனக்குழுவின் பெயரை அடுத்து :: மற்றும் உறுப்பு செயற்கூறு பெயர் குறிப்பிட வேண்டும்.