ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 8 · 2లో పాఠం 2కోర్సులో 18/18~15 min
మాడ్యూల్ పాఠాలు (2/2)

తరగతి టెంప్లేట్లు

ఫంక్షన్‌ల వలె, ఒకటి లేదా అంతకంటే ఎక్కువ డేటా రకాలకు సంబంధించి తరగతులను కూడా పారామితి చేయవచ్చు. డూప్లికేట్ కోడ్ లేకుండా ఏదైనా డేటా రకంతో పని చేసే జెనరిక్ డేటా స్ట్రక్చర్‌లను (జాబితాలు, క్యూలు, స్టాక్‌లు లేదా రేపర్‌లు వంటివి) నిర్వచించడానికి ఇది మమ్మల్ని అనుమతిస్తుంది.

క్లాస్ టెంప్లేట్‌ను నిర్వచించడం

తరగతి టెంప్లేట్‌ను ప్రకటించడానికి, మేము తరగతి నిర్వచనానికి ముందు వెంటనే template <typename T> సింటాక్స్‌ని ఉపయోగిస్తాము. తరగతి లోపల, సభ్యుల వేరియబుల్స్, రిటర్న్ రకాలు లేదా సభ్యుల ఫంక్షన్ పారామితులను నిర్వచించడానికి మేము T టైప్ పారామీటర్‌ని ఉపయోగించవచ్చు.

C++
template <typename T>
class Box {
private:
    T value;
public:
    Box(T v) : value(v) {}

    T getValue() const {
        return value;
    }
};

తక్షణం

క్లాస్ టెంప్లేట్ యొక్క ఆబ్జెక్ట్‌ను సృష్టిస్తున్నప్పుడు, మేము యాంగిల్ బ్రాకెట్‌ల మధ్య రకాన్ని స్పష్టంగా పేర్కొనాలి <> (C++17తో ప్రారంభించినప్పటికీ, కంపైలర్ దానిని Class టెంప్లేట్ ఆర్గ్యుమెంట్ డిడక్షన్ లేదా CTAD ద్వారా కొన్ని సందర్భాలలో తగ్గించవచ్చు):

C++
Box<int> intBox(10);        // T becomes int
Box<double> doubleBox(3.14); // T becomes double

టెంప్లేట్ స్పెషలైజేషన్

కొన్నిసార్లు మేము తరగతి టెంప్లేట్‌ని నిర్దిష్ట రకంతో ఇన్‌స్టాంటియేట్ చేసినప్పుడు దానికి భిన్నమైన ప్రవర్తనను కోరుకుంటున్నాము. ఈ సందర్భంలో, మేము template <> సింటాక్స్‌ని ఉపయోగించి మొత్తం స్పెషలైజేషన్ని నిర్వచిస్తాము, ఆపై లక్ష్య రకాన్ని పేర్కొనే తరగతి నిర్వచనం:

C++
// 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");
    }
};

మీరే ప్రయత్నించండి

వ్యాయామం#cpp.m8.l2.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

T టైప్ వాల్యూ అనే ప్రైవేట్ మెంబర్, దానిని ప్రారంభించే కన్స్ట్రక్టర్ మరియు విలువను అందించే పబ్లిక్ మెథడ్ getValue() constని కలిగి ఉన్న బాక్స్ అనే క్లాస్ టెంప్లేట్‌ను ప్రకటించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`బాక్స్` క్లాస్ డిక్లరేషన్‌కు `టెంప్లేట్ <typename T>`ని ముందుగా ఉంచాలని గుర్తుంచుకోండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#cpp.m8.l2.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

T రకం యొక్క పబ్లిక్ మెంబర్ డేటా, కన్స్ట్రక్టర్ ర్యాపర్(T d) మరియు std::coutకి డేటాను ప్రింట్ చేసే ప్రింట్() పద్ధతితో క్లాస్ టెంప్లేట్ Wrapper<T>ని ప్రకటించండి. తర్వాత, Wrapper<char> కోసం మొత్తం స్పెషలైజేషన్‌ను సృష్టించండి, ఇక్కడ ప్రింట్() పద్ధతి ఒకే కోట్‌లలో (ఉదా., Aకి బదులుగా 'A') అక్షరాన్ని ముద్రిస్తుంది.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`రేపర్<char>` యొక్క మొత్తం ప్రత్యేకతను సూచించడానికి `టెంప్లేట్ <>` ఉపయోగించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది