கன்ஸ்ட்ரக்டர்
என்பது ஆப்ஜெக்டை தொடக்க மதிப்பிருத்தப் பயன்படும் சிறப்பு மெம்பர் ஃபங்க்சன் ஆகும்.ஒரு
கிளாஸிற்கு ஆப்ஜெக்ட் உருவாக்கும் பொழுது கன்ஸ்ட்ரக்டர் தானாக அழைக்கப்படுகின்றது.
விதிகள்:
1.
கன்ஸ்ட்ரக்டர்
பெயரானது கிளாஸின் பெயராகவே இருக்க வேண்டும்.
2.
ரிடர்ன்
டைப்பை குறிப்பிடக்க் கூடாது.
சிண்டாக்ஸ்:
Class
class_name
{
Private:
__________________
_________________
Public:
Class_name()
{
____________________________
____________________________
}
Protected:
______________________________
________________________________
};
ஒரு கிளாஸிற்கு
ஆப்ஜெக்ட் உருவாக்கும் பொழுது கன்ஸ்ட்ரக்டர் தானாகவே அழைக்கப்படுகின்றது.
சான்று
நிரல்-1:
#include
<iostream>
using
namespace std;
class
exam
{
private:
int sno,mark1,mark2;
public:
exam()
{
sno=mark1=mark2=0;
}
void showdata()
{
cout<<"sno:
"<<sno<<" mark1: "<<mark1<<" mark2:
"<<mark2<<endl;
}
void getdata()
{
cout<<"Enter sno";
cin>>sno;
cout<<"Enter two
marks";
cin>>mark1>>mark2;
}
};
int
main()
{
exam e;
e.showdata();
e.getdata();
e.showdata();
return 0;
}
வெளியீடு:
sno:
0 mark1: 0 mark2: 0
Enter
sno101
Enter
two marks85 95
sno:
101 mark1: 85 mark2: 95
Process
returned 0 (0x0) execution time :
12.308 s
Press
any key to continue.
ஓவர் லோடடு
கன்ஸ்ட்ரக்டர்:
ஓரு ஃபங்க்சனை
எப்படி ஓவர் லோட் செய்ய முடியுமோ அதே போல் ஒரு கன்ஸ்ட்ரக்டரையும் ஓவர் லோட் செய்யலாம்.
அதாவது ஒரு கிளாஸில் ஒன்றிற்க்கு மேற்பட்ட கன்ஸ்ட்ரக்டர் இருக்கும்.அதற்கு அனுப்ப்படும்
பாராமீட்டரைப் பொருத்து அதன் அழைப்பு நிகழும்.
சான்று
நிரல்-2:
#include
<iostream>
using
namespace std;
class
exam
{
private:
int sno,mark1,mark2;
public:
exam()
{
sno=mark1=mark2=0;
}
exam(int a,int b,int c)
{
sno=a;
mark1=b;
mark2=c;
}
void showdata()
{
cout<<"sno:
"<<sno<<" mark1: "<<mark1<<" mark2:
"<<mark2<<endl;
}
};
int
main()
{
exam e1;
exam e2(101,90,95);
e1.showdata();
e2.showdata();
return 0;
}
வெளியீடு:
sno:
0 mark1: 0 mark2: 0
sno:
101 mark1: 90 mark2: 95
Process
returned 0 (0x0) execution time : 0.749
s
Press
any key to continue.
டிஃபால்ட்
கன்ஸ்ட்ரக்டர்:
எந்த ஆர்க்கியுமெண்டும்
இல்லாத கன்ஸ்ட்ரக்டர் டிஃபால்ட் கன்ஸ்ட்ரக்டர் ஆகும். இது நாம் எழுதா விட்டாலும் சி++
கம்பைலர் தானாகவே இயங்கும். எனினும் ஒரு பாரா மீட்டரைஸ்டு கன்ஸ்ட்ரக்டரை எழுதினால்
டிஃபால்ட் நாம் தான் எழுத வேண்டும்.
சான்று
நிரல்-3
#include
<iostream>
using
namespace std;
class
exam
{
private:
int sno,mark1,mark2;
public:
exam()//default constructor
{
}
};
int
main()
{
cout << "Hello world!"
<< endl;
return 0;
}
காப்பி
கன்ஸ்ட்ரக்டர்:
ஒரு ஆப்ஜெக்டின் மதிப்புகளை அதே கிளாஸின் மற்றொரு கிளாஸிற்கு காப்பி செய்ய காப்பி கன்ஸ்ட்ரக்டர் பயன்படுகின்றது.
ஒரு ஆப்ஜெக்டின் மதிப்புகளை அதே கிளாஸின் மற்றொரு கிளாஸிற்கு காப்பி செய்ய காப்பி கன்ஸ்ட்ரக்டர் பயன்படுகின்றது.
சான்று
நிரல்-4:
#include
<iostream>
using
namespace std;
class
item
{
private:
int itno;
string itname;
float price;
public:
item(int a,string b,float c)
{
itno=a;
itname=b;
price=c;
}
item(item &ptr)
{
itno=ptr.itno;
itname=ptr.itname;
price=ptr.price;
}
void showdata()
{
cout<<"item
no:"<<itno<<" itname:"<<itname<<"
price:"<<price<<endl;
}
};
int
main()
{
item i1(1,"Monitor",4500);
item i2(i1);
cout<<"first item"<<endl;
i1.showdata();
cout<<"second
item"<<endl;
i2.showdata();
return 0;
}
வெளியீடு:
first
item
item
no:1 itname:Monitor price:4500
second
item
item
no:1 itname:Monitor price:4500
Process
returned 0 (0x0) execution time : 0.686
s
Press
any key to continue.
டெஸ்ட்ரக்டர்:
ஒரு ஆப்ஜெக்ட்
ஆனது அதன் முடிவு நிலைக்கு வரும் பொழுது டெஸ்ட்ரக்டர் அழைக்கப்படுகின்றது. இதுவும்
கிளாஸின் பெயரில் தான்
இருக்கும்
ஆனால் முன்னதாக ஒரு ~ சிம்பல் இருக்கும்.
இது ஒரு
ஆப்ஜெக்ட் பயன்படுத்திய மெமரியை காலி செய்ய பயன்படுகின்றது.இது எந்த ஆர்க்கியுமெண்டையும்
ஏற்காது.
சான்று
நிரல்-5:
#include
<iostream>
using
namespace std;
class
book
{
private:
int book_no;
string book_name;
public:
book()
{
book_no=10;
book_name="java";
}
~book()
{
book_no=0;
book_name="";
cout<<"destructor
invoked"<<endl;
showdetail();
}
void
showdetail()
{
cout<<"book no:
"<<book_no<<" book name:
"<<book_name<<endl;
}
};
int
main()
{
book b;
b.showdetail();
return 0;
}
வெளியீடு:
book
no: 10 book name: java
destructor
invokedbook no: 0 book name:
Muthu karthikeyan,Madurai