మాడ్యూల్ పాఠాలు (2/2)
పాలిమార్ఫిజం మరియు వర్చువల్ ఫంక్షన్లు
పాలిమార్ఫిజం పాయింటర్ ద్వారా వివిధ ఉత్పన్న తరగతులకు చెందిన వస్తువులను వాటి బేస్ క్లాస్కు సూచించడానికి అనుమతిస్తుంది, ఒక పద్ధతి యొక్క సరైన సంస్కరణను రన్టైమ్లో (లేట్ బైండింగ్) అని నిర్ధారిస్తుంది.
వర్చువల్ విధులు: virtual మరియు override
ఒక పద్ధతిలో పాలిమార్ఫిజమ్ని ప్రారంభించడానికి, మేము తప్పనిసరిగా బేస్ క్లాస్లోని virtual కీవర్డ్ని ఉపయోగించి దానిని ప్రకటించాలి. ఉత్పన్నమైన తరగతులలో, మేము ఆ పద్ధతిని భర్తీ చేస్తున్నామని స్పష్టంగా చెప్పడానికి override స్పెసిఫైయర్ని ఉపయోగిస్తాము.
class Employee {
public:
virtual void work() {
std::cout << "Generic work" << std::endl;
}
// IMPORTANT: Virtual destructor in base class to avoid memory leaks
virtual ~Employee() = default;
};
class Developer : public Employee {
public:
void work() override {
std::cout << "Writing C++ code" << std::endl;
}
};బేస్ క్లాస్కి పాయింటర్లను ఉపయోగించి, C++ రన్టైమ్లో సరైన పద్ధతిని పరిష్కరిస్తుంది:
Employee* emp = new Developer();
emp->work(); // Prints "Writing C++ code" instead of "Generic work"
delete emp;వియుక్త తరగతులు మరియు స్వచ్ఛమైన వర్చువల్ విధులు
ప్యూర్ వర్చువల్ ఫంక్షన్ అనేది = 0తో చివరగా ప్రకటించబడిన వర్చువల్ మెంబర్ ఫంక్షన్. ఇది అధికారిక ఒప్పందాన్ని సూచిస్తుంది: బేస్ క్లాస్ ఎటువంటి అమలును అందించదు, దానిని పూర్తిగా సబ్క్లాస్లకు అప్పగిస్తుంది.
కనీసం ఒక స్వచ్ఛమైన వర్చువల్ ఫంక్షన్ని కలిగి ఉన్న తరగతిని అబ్స్ట్రాక్ట్ క్లాస్ అని పిలుస్తారు మరియు నేరుగా ఇన్స్టాంటియేట్ చేయబడదు.
class Instrument {
public:
virtual void play() = 0; // Pure virtual
virtual ~Instrument() = default;
};
class Piano : public Instrument {
public:
void play() override {
std::cout << "Playing piano..." << std::endl;
}
};మీరే ప్రయత్నించండి
'సమ్ సౌండ్'ని ప్రింట్ చేసే యానిమల్లో వర్చువల్ పద్ధతి makeSound()ని నిర్వచించండి. ఆపై 'మియావ్'ని ప్రింట్ చేయడానికి ఓవర్రైడ్ స్పెసిఫైయర్ని ఉపయోగించి క్యాట్ క్లాస్లో ఓవర్రైడ్ చేయండి.
సూచనను చూపించు
బేస్ క్లాస్ మెథడ్కు `వర్చువల్`ని ప్రిపెండ్ చేయాలని గుర్తుంచుకోండి మరియు డెరైవ్డ్ క్లాస్లో పారామీటర్ కుండలీకరణాల తర్వాత `ఓవర్రైడ్`ని ఉంచాలి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
ప్రింట్ చేయదగిన అబ్స్ట్రాక్ట్ క్లాస్లో స్వచ్ఛమైన వర్చువల్ ఫంక్షన్ ప్రింట్()ని తిరిగి ఇచ్చే శూన్యతను ప్రకటించండి. ఆపై ప్రింటబుల్ నుండి పబ్లిక్గా పొందే డాక్యుమెంట్ క్లాస్ని సృష్టించండి మరియు 'ప్రింటింగ్ డాక్యుమెంట్'ని ప్రింట్ చేయడానికి ప్రింట్() పద్ధతిని అమలు చేయండి.
సూచనను చూపించు
`వర్చువల్ శూన్య ముద్రణ() = 0;` సంతకంతో స్వచ్ఛమైన వర్చువల్ ఫంక్షన్ ప్రకటించబడుతుంది. `ప్రింటబుల్` నుండి `పత్రం` పబ్లిక్గా పొందిందని నిర్ధారించుకోండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది