முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 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 name)) ஏற்றுக்கொண்டு, பயனர்பெயரை துவக்க அதைப் பயன்படுத்தும் பொது கட்டமைப்பாளரைச் சேர்க்கவும். பயனர்பெயரை வழங்கும் பொது பெறுபவர் std::string getUsername()ஐச் சேர்க்கவும். முக்கியமாக, 'Alice' ஐக் கடந்து ஒரு பயனர் பொருளை உருவாக்கி, அதன் பயனர்பெயரை std::cout ஐப் பயன்படுத்தி அச்சிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

கன்ஸ்ட்ரக்டருக்கு வகுப்பின் அதே பெயர் உள்ளது மேலும் எந்த வகையையும் குறிப்பிடவில்லை, `செல்லம்` கூட இல்லை.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

உடற்பயிற்சி#cpp.m4.l2.e2
முயற்சிகள்: 0ஏற்றுகிறது…

இரண்டு பொது முழு எண் உறுப்பினர்களுடன் புள்ளி என்ற வகுப்பை வரையறுக்கவும்: x மற்றும் y. x மற்றும் y ஐ 0 க்கு துவக்கும் இயல்புநிலை கட்டமைப்பாளரைச் சேர்க்கவும் (அளவுருக்கள் இல்லை) முக்கியமாக, இயல்புநிலை கட்டமைப்பாளரைப் பயன்படுத்தி ஒரு புள்ளி பொருளை உருவாக்கி x மற்றும் y ஐ அச்சிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

இயல்புநிலை கட்டமைப்பாளர் எந்த வாதங்களையும் எடுக்கவில்லை: `பாயிண்ட்() {x = 0; y = 0; }`.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்