இனக்குழுக்கள் மற்றும் பொருள்கள்
கற்றலின் நோக்கங்கள் :
இந்தப்பாடத்தைக் கற்றபின், மாணவர்கள்
• இனக்குழு, பொருள்கள், ஆக்கிகள் மற்றும் அழிப்பியின் பயன்பாடுகளை புரிந்து கொள்ளுதல்.
• ஆக்கி மற்றும் அழிப்பியுடன் கூடிய இனக்குழுவை பயன்படுத்தி C++ நிரல் எழுதுதல்.
• ஆக்கி மற்றும் அழிப்பியுடன் கூடிய C++ நிரலை இயக்கி தவறுகளை திருத்துதல்.
இனக்குழு அறிமுகம் :
C++ ன் மிக முக்கியமான பண்புக்கூறு இனக்குழு என்பதாகும். இது ஜேர்ன் ஸ்ட்ரௌஸ்ட்ரப் (Bjarne Stroustrup) என்பவரால் உருவாக்கப்பட்டது, முதலில் அவர் சூட்டிய பெயர் “C WITH CLASSES” என்பதாகும். C++ ஆனது, பொருள் நோக்கு நிரலாக்க மொழியின் பொதுவான நான்கு அடிப்படை அம்சங்களை அதாவது அருவமாக்கம், உரைபொதியாக்கம், மரபுரிமம் மற்றும் பல்லுருவாக்கம் ஆகியவற்றை அளிக்கிறது.
இனக்குழுவின் தேவை:
இனக்குழுவானது தரவுகளையும் அவை தொடர்பான செயல் கூறுகளையும் ஒன்றாக சேர்த்து வைக்க வழி செய்கிறது. இனக்குழுவானது தரவுகளையும், அவற்றிற்கான பண்புகளையும் மட்டும் கொண்டிருக்காமல், நடப்புலகில் நிலவும் பொருளைக் குறிப்பிட உதவுகிறது. மேலும் அப்பொருள் தொடர்பான செயல்பாடுகளையும் கொண்டிருக்கும். இது பயனர் வரையறுக்கும் தரவினத்தை உருவாக்கப் பயன்படுகிறது.
இனக்குழு வரையறை (Declaration of a class)
C++ல் இனக்குழுவின் வரையறையில் Class என்னும் சிறப்பு சொல்லைத் (Keywords) தொடர்ந்து இனக்குழுவின் பெயர் இடம்பெற வேண்டும். இனக்குழுவின் உடற்பகுதி வரையறுப்பானது நெளிவு அல்லது கொக்கி வடிவ அடைப்பு ({ }) குறிக்குள் அடைக்கப்பட்டு அரைப்புள்ளியுடன் அல்லது இனக்குழு பொருள்கள் அறிவிப்புடன் முடிவடைதல் வேண்டும்.
குறிப்பு
கட்டுரு மற்றும் இனக்குழுவிற்கு இடையேயான வேறுபாடானது, கட்டுரு உறுப்புகளானது கொடாநிலையாக Public அணுகியல்புடணும் இனக்குழுவின் உறுப்புகளானது Private அணுகியல்புடணும் இருக்கும்.
இனக்குழுவை வரையறுப்பதற்கான பொது வடிவம்:
class class-name
{
private:
தரவு உறுப்புகள் அறிவிப்பு;
செயல் கூறுகள் அறிவிப்பு;
protected:
தரவு உறுப்புகள் அறிவிப்பு;
செயல் கூறுகள் அறிவிப்பு;
public:
தரவு உறுப்புகள் அறிவிப்பு;
செயல் கூறுகள் அறிவிப்பு;
};
• இனக்குழுவின் உடற்பகுதியானது தரவு உறுப்புகளின் அறிவிப்பை கொண்டிருக்கும். (தரவு உறுப்புகள் மற்றும் உறுப்பு செயற்கூறுகள்)
• இனக்குழுவின் உடற்பகுதியானது மூன்று அணுகியல்பு வரையறுப்பிகளை கொண்டுள்ளது. (Private, Protected மற்றும் Public)
இனக்குழு அணுகியல்பு வரையறுப்பிகள் :
பொருள்நோக்கு நிரலாக்க மொழியின் மிக முக்கியமான பண்புக்கூறுகளுள் ஒன்று தரவு மறைப்பு (Data hiding) என்பதாகும். இது நிரலில் உள்ள செயற்கூறானது, இனக்குழுவிற்குள் அறிவிக்கப்பட்டிருக்கும் உறுப்புகளை (தரவு உறுப்புகள், உறுப்புச் செயல் கூறுகள்) அணுகுவதற்குத் தடை விதிக்கிறது. இனக்குழுவின் உறுப்புகளை அணுக தடை விதிப்பதற்கு இனக்குழுவினுள் அறிவிக்கப்பட்டிருக்கும் Private, Protected மற்றும் Public என்ற சிறப்புச் சொற்கள் பயன்படுகிறது.
Private, Protected மற்றும் Public என்ற சிறப்புச் சொற்களானது அணுகியல்பு வரையறுப்பிகள் என அழைக்கப்படுகின்றன. இனக்குழு உறுப்புகளின் கொடாநிலை அணுகியல்பானது Private ஆகும்.
Public உறுப்புகள் :
Public அணுகியல்புடன் கூடிய உறுப்புகளை இனக்குழுவிற்கு வெளியில் இருந்தும் அணுக முடியும். Public என அறிவிக்கப்பட்ட தரவு உறுப்புகளை எவ்வித உறுப்பு செயல்பாடுகளின் உதவியுமின்றி அணுக முடியும். அதாவது தரவு உறுப்புகளுக்கு மதிப்பைக் கொடுக்கவோ அல்லது மதிப்பைப் பெறவோ முடியும். உறுப்பு செயற்கூறுகள் தேவை இல்லை.
Private உறுப்புகள் :
Private அணுகியல்புடன் கூடிய இனக்குழு உறுப்புகளை இனக்குழுவிற்கு வெளியில் இருந்து அணுகமுடியாது. இனக்குழுவின் உறுப்பு செயற்கூறுகள் மட்டுமே தரவு உறுப்புகளை அணுக முடியும். கொடாநிலையாக இனக்குழுவின் உறுப்புகள் அனைத்தும் Private அணுகியல்புடன் அறிவிக்கப்படும்.
Protected உறுப்புகள் :
Protected அணுகியல்புடன் அறிவிக்கப்பட்ட தரவு உறுப்புகளும், உறுப்பு செயற்கூறுகளும் Private அணுகியல்பு கொண்ட உறுப்புகளைப் போலவே செயல்படும். ஆனால் அந்த இனக்குழுவை அடிப்படையாகக் கொண்டு தருவிக்கப்பட்ட இனக்குழுவிற்குள்ளும் அணுக முடியும்.
எடுத்துக்காட்டு
குறிப்பு
ஓர் இனக்குழுவில் உள்ள அனைத்து உறுப்புகளும் (தரவு உறுப்புகள், உறுப்பு செயல் கூறுகள்) Private அணுகியல்புடன் அறிவிக்கப்பட்டால் அந்த இனக்குழுவானது செயலற்றுப் போகும். இனக்குழுவின் பொருளானது இனக்குழுவின் உறுப்புகள் எதையும் அணுக முடியாது.
இனக்குழு உறுப்புகளின் வரையறை
இனக்குழுவானது உறுப்புகளை உள்ளடக்கியதாகும். உறுப்புகளானது தரவு உறுப்புகள் மற்றும் உறுப்பு செயற்கூறுகள் என வகைப்படுத்தப்படும். தரவு உறுப்புகள் என்பவை தரவு மாறிகள் எனப்படும். இவை இனக்குழுவின் பண்புக்கூறுகளைக் குறிப்பதாகும். உறுப்பு செயற்கூறுகள் என்பவை ஓர் இனக்குழுவானது குறிப்பிட்ட செயல்பாட்டைச் செய்ய உதவும் செயற்கூறுகளாகும். உறுப்பு செயற்கூறுகளானது வழிமுறைகள் (Methods) எனவும் தரவு உறுப்புகளானது பண்புக்கூறுகள் (attributes) எனவும் அழைக்கப்படும்.
எடுத்துக்காட்டு
குறிப்பு :
இனக்குழுவானது ஆக்கி மற்றும் அழிப்பி எனப்படும் தனிச்சிறப்பான உறுப்பு செயற்கூறுகளைக் கொண்டிருக்கும்.
உறுப்பு செயற்கூறுகளை வரையறுத்தல் :
இனக்குழுவின் உறுப்புச் செயற்கூறுகளை வரையறுக்காமல் இனக்குழுவின் அறிவிப்பானது முழுமையடையாது. இனக்குழுவின் உறுப்பு செயற்கூறானது இரண்டு விதங்களில் வரையறுக்கப்படுகிறது.
1) இனக்குழுவிற்கு உள்ளே வரையறுத்தல்
2) இனக்குழுவிற்கு வெளியே வரையறுத்தல்
1) இனக்குழுவிற்கு உள்ளே வரையறுத்தல் :
இனக்குழுவின் உள்ளே வரையறுக்கப்படும் செயற்கூறானது inline செயற்கூறு போல இயங்குகின்றன. அவை inline உறுப்பு செயற்கூறுகள் எனவும் அழைக்கப்படுகின்றன.
குறிப்பு :
செயற்கூறானது inline செயல்கூறாக அறிவிக்கப்பட்டால் நிரலின் தொகுப்பு நேரத்தில் அச்செயற்கூறு அழைக்கப்படும் இடங்களில் எல்லாம் நிரல் பெயர்ப்பியானது அச்செயற்கூறின் குறிமுறையை பதிலீடு செய்யும்.
2) இனக்குழுவிற்கு வெளியே வரையறுத்தல் :
இனக்குழுவின் உறுப்பு செயற்கூறானது இனக்குழுவிற்கு வெளியே சாதாரண இனக்குழு வரையறை போலவே வரையறுக்க முடியும். (செயற்கூறு வரையறை பற்றி நீங்கள் நன்கு அறிந்திருந்தால்) இது Outline உறுப்புச் செயற்கூறுகள் (or) non-inline உறுப்புச் செயற்கூறுகள் எனவும் அழைக்கப்படும். உறுப்பு செயற்கூறுகளை இனக்குழுவிற்கு வெளியே வரையறுப்பதற்கு (::) வரையெல்லை செயற்குறியானது (Scope resolution operator) பயன்படுகிறது. உறுப்பு செயற்கூறை இனக்குழுவிற்கு வெளியேவரையறை செய்வதற்கு உதவும் பொது வடிவம்
return_type class_name :: function_name (parameter list)
{
function definition
}
விளக்க நிரல் 14.1 Inline மற்றும் Outline உறுப்பு செயற்கூறுகள்
அணுகியல்பு குறிப்பிடப்படவில்லை எனில் அவை தானமைவாக Private என கருதப்படும்.
# include <iostream>
using namespace std;
class Box
{
double width; // no access specifier mentioned
public:
double length;
void printWidth( ) //inline member function definition
{
cout<<”\n The width of the box is...”<<width;
}
void setWidth( double w ); //prototype of the function
};
void Box :: setWidth(double w) // outline member function definition
{
width=w;
}
int main( )
{
Box b; // object for class Box
b.setWidth(10.0); // Use member function to set the width.
b.printWidth( ); //Use member function to print the width.
return 0;
}
வெளியீடு :
The width of the box is... 10
குறிப்பு
பல கூற்றுகள், மடக்குகள், switch அல்லது Go To கூற்றுகள் ஆகியவற்றை கொண்ட உறுப்பு செயற்கூறை Inline செயற்கூறாக அறிவிப்பது ஏற்புடையதல்ல