தொகுதி பாடங்கள் (2/2)
வகுப்பு வார்ப்புருக்கள்
செயல்பாடுகளைப் போலவே, வகுப்புகளும் ஒன்று அல்லது அதற்கு மேற்பட்ட தரவு வகைகளைப் பொறுத்து அளவுருவாக மாற்றப்படலாம். குறியீட்டை நகலெடுக்காமல் எந்த தரவு வகையிலும் வேலை செய்யும் பொதுவான தரவு கட்டமைப்புகளை (பட்டியல்கள், வரிசைகள், அடுக்குகள் அல்லது ரேப்பர்கள் போன்றவை) வரையறுக்க இது அனுமதிக்கிறது.
ஒரு வகுப்பு டெம்ப்ளேட்டை வரையறுத்தல்
வகுப்பு டெம்ப்ளேட்டை அறிவிக்க, வகுப்பு வரையறைக்கு முன் உடனடியாக template <typename T> தொடரியல் பயன்படுத்துவோம். வகுப்பின் உள்ளே, உறுப்பினர் மாறிகள், திரும்பும் வகைகள் அல்லது உறுப்பினர் செயல்பாடு அளவுருக்களை வரையறுக்க T வகை அளவுருவைப் பயன்படுத்தலாம்.
template <typename T>
class Box {
private:
T value;
public:
Box(T v) : value(v) {}
T getValue() const {
return value;
}
};உடனடிப்படுத்தல்
ஒரு கிளாஸ் டெம்ப்ளேட்டின் பொருளை உருவாக்கும் போது, <> கோண அடைப்புக்குறிகளுக்கு இடையே உள்ள வகையை நாம் வெளிப்படையாகக் குறிப்பிட வேண்டும் (C++17 இல் தொடங்கினாலும், கம்பைலர் அதை சில சூழல்களில் Class Template Argument Deduction அல்லது CTAD மூலம் கழிக்க முடியும்):
Box<int> intBox(10); // T becomes int
Box<double> doubleBox(3.14); // T becomes doubleடெம்ப்ளேட் சிறப்பு
சில சமயங்களில், ஒரு குறிப்பிட்ட வகையுடன் ஒரு கிளாஸ் டெம்ப்ளேட்டைத் தூண்டும் போது அதற்கு வேறுபட்ட நடத்தையை நாங்கள் விரும்புகிறோம். இந்த வழக்கில், template <> தொடரியல் பயன்படுத்தி மொத்த நிபுணத்துவத்தை வரையறுக்கிறோம், அதைத் தொடர்ந்து இலக்கு வகையைக் குறிப்பிடுகிறோம்:
// Total specialization for the bool type
template <>
class Box<bool> {
private:
bool value;
public:
Box(bool v) : value(v) {}
void printState() {
std::cout << (value ? "True" : "False");
}
};நீங்களே முயற்சி செய்து பாருங்கள்
T வகையின் மதிப்பு என பெயரிடப்பட்ட தனிப்பட்ட உறுப்பினர், அதை துவக்கும் ஒரு கட்டமைப்பாளர் மற்றும் மதிப்பை வழங்கும் பொது முறை getValue() const ஆகியவற்றைக் கொண்ட Box என்ற வகுப்பு டெம்ப்ளேட்டை அறிவிக்கவும்.
குறிப்பைக் காட்டு
`பெட்டி' வகுப்பு அறிவிப்புக்கு `டெம்ப்ளேட் <typename T>` என்பதை முன்வைக்க நினைவில் கொள்ளுங்கள்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
T வகையின் பொது உறுப்பினர் தரவு, கன்ஸ்ட்ரக்டர் ரேப்பர்(T d) மற்றும் std::cout க்கு தரவை அச்சிடும் அச்சு() முறை ஆகியவற்றைக் கொண்ட கிளாஸ் டெம்ப்ளேட் ரேப்பர்<T>ஐ அறிவிக்கவும். அடுத்து, ரேப்பர்<char>க்கான மொத்த நிபுணத்துவத்தை உருவாக்கவும், அங்கு அச்சு() முறை ஒற்றை மேற்கோள்களில் (எ.கா., A க்குப் பதிலாக 'A') இணைக்கப்பட்ட எழுத்தை அச்சிடுகிறது.
குறிப்பைக் காட்டு
`ரேப்பர்<char>` இன் மொத்த நிபுணத்துவத்தைக் குறிக்க `டெம்ப்ளேட் <>` ஐப் பயன்படுத்தவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்