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

కన్స్ట్రక్టర్లు మరియు డిస్ట్రక్టర్లు

కన్‌స్ట్రక్టర్‌లు మరియు డిస్ట్రక్టర్‌లు వస్తువుల జీవితచక్రాన్ని నిర్వహించే ప్రత్యేక సభ్యుల విధులు: వాటి సృష్టి (ప్రారంభం) మరియు వాటి విధ్వంసం (వనరుల శుభ్రత).

కన్స్ట్రక్టర్లు

మెమరీలో తరగతి యొక్క వస్తువు సృష్టించబడినప్పుడు కన్‌స్ట్రక్టర్ స్వయంచాలకంగా పిలువబడుతుంది.

  • దీనికి తరగతికి అదే పేరు ఉంది.
  • ఇది ** రిటర్న్ రకం లేదు** (void కూడా కాదు).
  • విభిన్న సెట్ల పారామితులను ఆమోదించడానికి ఇది ఓవర్‌లోడ్ చేయబడుతుంది.
C++
#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++ కంపైలర్ పారామితులు లేకుండా డిఫాల్ట్ కన్‌స్ట్రక్టర్‌ను ఉత్పత్తి చేస్తుంది. అయితే, మీరు పారామితులతో అనుకూల కన్స్ట్రక్టర్‌ను వ్రాస్తే, కంపైలర్ ఇకపై డిఫాల్ట్‌ను స్వయంచాలకంగా ఉత్పత్తి చేయదు, కనుక అవసరమైతే మీరు దానిని స్పష్టంగా నిర్వచించవలసి ఉంటుంది:

C++
class Point {
public:
    int x;
    int y;

    // Explicit default constructor
    Point() {
        x = 0;
        y = 0;
    }
};

విధ్వంసకులు

ఆబ్జెక్ట్ పరిధిని దాటి పోయినప్పుడు లేదా మెమరీ నుండి స్పష్టంగా తీసివేయబడినప్పుడు డిస్ట్రక్టర్ స్వయంచాలకంగా పిలువబడుతుంది.

  • ఇది ~** (ఉదా. ~Item())కి ముందు ఉన్న క్లాస్‌కు **అదే పేరును కలిగి ఉంది.
  • ఇది పారామితులను అంగీకరించదు మరియు తిరిగి వచ్చే రకం లేదు.
  • ఇది వనరులను విడుదల చేయడానికి ఉపయోగించబడుతుంది (ఉదా., ఫైళ్లను మూసివేయడం, డైనమిక్‌గా కేటాయించిన మెమరీని ఖాళీ చేయడం).
C++
class ResourceManager {
public:
    ~ResourceManager() {
        // Cleanup code
        std::cout << "Resources released." << std::endl;
    }
};

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

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

ప్రైవేట్ మెంబర్ std::string వినియోగదారు పేరుతో వినియోగదారు అనే తరగతిని నిర్వచించండి. స్ట్రింగ్‌ను అంగీకరించే పబ్లిక్ కన్‌స్ట్రక్టర్‌ను జోడించండి (యూజర్(స్టిడి::స్ట్రింగ్ పేరు)) మరియు వినియోగదారు పేరును ప్రారంభించేందుకు దాన్ని ఉపయోగిస్తుంది. వినియోగదారు పేరును అందించే పబ్లిక్ గెటర్ std::string getUsername()ని జోడించండి. ప్రధానంగా, 'Alice'ని పేరుగా పాస్ చేసే వినియోగదారు ఆబ్జెక్ట్‌ను సృష్టించండి మరియు దాని వినియోగదారు పేరును std::cout ఉపయోగించి ప్రింట్ చేయండి.

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

కన్‌స్ట్రక్టర్‌కి క్లాస్‌తో సమానమైన పేరు ఉంది మరియు ఏ రిటర్న్ రకాన్ని పేర్కొనలేదు, `శూన్యం` కూడా కాదు.

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

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

రెండు పబ్లిక్ పూర్ణాంకాల సభ్యులతో పాయింట్ అనే తరగతిని నిర్వచించండి: x మరియు y. x మరియు yని 0కి ప్రారంభించే డిఫాల్ట్ కన్‌స్ట్రక్టర్ (పారామీటర్‌లు లేవు)ని జోడించండి. ప్రధానంగా, డిఫాల్ట్ కన్‌స్ట్రక్టర్‌ని ఉపయోగించి పాయింట్ ఆబ్జెక్ట్‌ను సృష్టించండి మరియు x మరియు yని ప్రింట్ చేయండి.

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

డిఫాల్ట్ కన్స్ట్రక్టర్ ఎటువంటి వాదనలు తీసుకోదు: `పాయింట్() {x = 0; y = 0; }`.

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