మాడ్యూల్ పాఠాలు (2/2)
కన్స్ట్రక్టర్లు మరియు డిస్ట్రక్టర్లు
కన్స్ట్రక్టర్లు మరియు డిస్ట్రక్టర్లు వస్తువుల జీవితచక్రాన్ని నిర్వహించే ప్రత్యేక సభ్యుల విధులు: వాటి సృష్టి (ప్రారంభం) మరియు వాటి విధ్వంసం (వనరుల శుభ్రత).
కన్స్ట్రక్టర్లు
మెమరీలో తరగతి యొక్క వస్తువు సృష్టించబడినప్పుడు కన్స్ట్రక్టర్ స్వయంచాలకంగా పిలువబడుతుంది.
- దీనికి తరగతికి అదే పేరు ఉంది.
- ఇది ** రిటర్న్ రకం లేదు** (
voidకూడా కాదు). - విభిన్న సెట్ల పారామితులను ఆమోదించడానికి ఇది ఓవర్లోడ్ చేయబడుతుంది.
#include <iostream>
#include <string>
class Item {
private:
std::string name;
double price;
public:
// Parameterized constructor
Item(std::string itemName, double itemPrice) {
name = itemName;
price = itemPrice;
std::cout << "Object " << name << " created." << std::endl;
}
void display() {
std::cout << name << ": " << price << " EUR" << std::endl;
}
};
int main() {
// Implicit call to the constructor passing parameters
Item book("Libro C++", 29.99);
book.display();
return 0;
}డిఫాల్ట్ కన్స్ట్రక్టర్
మీరు ఏ కన్స్ట్రక్టర్ను నిర్వచించకపోతే, C++ కంపైలర్ పారామితులు లేకుండా డిఫాల్ట్ కన్స్ట్రక్టర్ను ఉత్పత్తి చేస్తుంది. అయితే, మీరు పారామితులతో అనుకూల కన్స్ట్రక్టర్ను వ్రాస్తే, కంపైలర్ ఇకపై డిఫాల్ట్ను స్వయంచాలకంగా ఉత్పత్తి చేయదు, కనుక అవసరమైతే మీరు దానిని స్పష్టంగా నిర్వచించవలసి ఉంటుంది:
class Point {
public:
int x;
int y;
// Explicit default constructor
Point() {
x = 0;
y = 0;
}
};విధ్వంసకులు
ఆబ్జెక్ట్ పరిధిని దాటి పోయినప్పుడు లేదా మెమరీ నుండి స్పష్టంగా తీసివేయబడినప్పుడు డిస్ట్రక్టర్ స్వయంచాలకంగా పిలువబడుతుంది.
- ఇది
~** (ఉదా.~Item())కి ముందు ఉన్న క్లాస్కు **అదే పేరును కలిగి ఉంది. - ఇది పారామితులను అంగీకరించదు మరియు తిరిగి వచ్చే రకం లేదు.
- ఇది వనరులను విడుదల చేయడానికి ఉపయోగించబడుతుంది (ఉదా., ఫైళ్లను మూసివేయడం, డైనమిక్గా కేటాయించిన మెమరీని ఖాళీ చేయడం).
class ResourceManager {
public:
~ResourceManager() {
// Cleanup code
std::cout << "Resources released." << std::endl;
}
};మీరే ప్రయత్నించండి
ప్రైవేట్ మెంబర్ std::string వినియోగదారు పేరుతో వినియోగదారు అనే తరగతిని నిర్వచించండి. స్ట్రింగ్ను అంగీకరించే పబ్లిక్ కన్స్ట్రక్టర్ను జోడించండి (యూజర్(స్టిడి::స్ట్రింగ్ పేరు)) మరియు వినియోగదారు పేరును ప్రారంభించేందుకు దాన్ని ఉపయోగిస్తుంది. వినియోగదారు పేరును అందించే పబ్లిక్ గెటర్ std::string getUsername()ని జోడించండి. ప్రధానంగా, 'Alice'ని పేరుగా పాస్ చేసే వినియోగదారు ఆబ్జెక్ట్ను సృష్టించండి మరియు దాని వినియోగదారు పేరును std::cout ఉపయోగించి ప్రింట్ చేయండి.
సూచనను చూపించు
కన్స్ట్రక్టర్కి క్లాస్తో సమానమైన పేరు ఉంది మరియు ఏ రిటర్న్ రకాన్ని పేర్కొనలేదు, `శూన్యం` కూడా కాదు.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
రెండు పబ్లిక్ పూర్ణాంకాల సభ్యులతో పాయింట్ అనే తరగతిని నిర్వచించండి: x మరియు y. x మరియు yని 0కి ప్రారంభించే డిఫాల్ట్ కన్స్ట్రక్టర్ (పారామీటర్లు లేవు)ని జోడించండి. ప్రధానంగా, డిఫాల్ట్ కన్స్ట్రక్టర్ని ఉపయోగించి పాయింట్ ఆబ్జెక్ట్ను సృష్టించండి మరియు x మరియు yని ప్రింట్ చేయండి.
సూచనను చూపించు
డిఫాల్ట్ కన్స్ట్రక్టర్ ఎటువంటి వాదనలు తీసుకోదు: `పాయింట్() {x = 0; y = 0; }`.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది