[C++] Constructor และ Destructor


4. Constructor

Constructor เป็นฟังก์ชันพิเศษภายในคลาส ซึ่งแตกต่างจากฟังก์ชันอื่น 2 ประการ
  • ชื่อเหมือนคลาสนั้นๆ 
  • ในขณะที่สร้าง object เสร็จสมบุรณ์พร้อมใช้งาน constructor จะถูกเรียกใช้งานอัตโนมัติเป็นลำดับแรกทันที โดยเราไม่จำเป็นต้องสั่งให้ทำงานแต่อย่างใด

Ex4 Constructor

#include <iostream>
using namespace std;

class Person {
 
 public:
  
  /****** Constructor ******/
  Person() {
   cout << "Person alive" << endl;
  }
  
  /****** Setter and Getter ******/
  void setPID (string PID) {
   _PID = PID;
  }
  string getPID () {
   return _PID;
  }
  void setFullname (string Fullname) {
   _Fullname = Fullname;
  }
  string getFullname () {
   return _Fullname;
  }
  void setAddress (string Address) {
   _Address = Address;
  }
  string getAddress () {
   return _Address;
  }
  
  /****** Methods ******/
  void Speak(){
   cout << "Person speak" << endl;
  }
  void Walk(){
   cout << "Person walk" << endl;
  } 
     
 private:
  string _PID;
  string _Fullname;
  string _Address;
};

int main(int argc, char** argv)
{ 
 Person p; 
 p.Speak();
 p.Walk();
 
 system("pause"); 
 return 0;
}


Result : 

Person alive
Person speak
Person walk


5. Constructor แบบมี parameter

constructor สามารถมีพารามิเตอร์ได้ แต่ละ object ที่สร้างขึ้นมา ต่างคนต่างเก็บข้อมูลและทำงานเป็นของตัวเอง เรียกว่า แต่ละ instance

Ex5 Constructor with Parameter

#include <iostream>
using namespace std;

class Person {
 
 public:
  
  /****** Constructor with Parameter ******/
  Person(string Gender) {
   _Gender = Gender;
  }
  
  /****** Setter and Getter ******/
  void setPID (string PID) {
   _PID = PID;
  }
  string getPID () {
   return _PID;
  }
  void setFullname (string Fullname) {
   _Fullname = Fullname;
  }
  string getFullname () {
   return _Fullname;
  }
  void setAddress (string Address) {
   _Address = Address;
  }
  string getAddress () {
   return _Address;
  }
  void setGender (string Gender) {
   _Gender = Gender;
  }
  string getGender () {
   return _Gender;
  }
  
  /****** Methods ******/
  void Speak(){
   cout << "Person speak" << endl;
  }
  void Walk(){
   cout << "Person walk" << endl;
  } 
     
 private:
  string _PID;
  string _Fullname;
  string _Address;
  string _Gender;
};

int main(int argc, char** argv)
{ 
 Person p1("Female"); 
 cout << "P1 is " << p1.getGender() << endl;
 
 Person p2("Male"); 
 cout << "P2 is " << p2.getGender() << endl;
 
 system("pause"); 
 return 0;
}


Result : 

P1 is Female
P2 is Male


6. Destructor

Constructor เป็นฟังก์ชันพิเศษภายในคลาส มีชื่อเหมือนคลาสตัวเอง แต่จะมีเครื่องหมาย ~ กำกับ ถูกสั่งให้ทำงานอัตโนมัติเมื่อสิ้นสุดความเป็น object

Ex5 Constructor with Parameter

#include <iostream>
using namespace std;

class Person {
 public:
  
  /****** Constructor ******/
  Person() {
   cout << "Person alive" << endl;
  }
  
  /****** Destructor ******/
  ~Person() {
   cout << "Person dead" << endl;
  } 
     
};

int main(int argc, char** argv)
{ 
 Person p; 
 
 system("pause"); 
 return 0;
}


Result : 

Person alive


ตัวแปร p ถือเป็นตัวแปรขอบเขตแบบ local ถูกประกาศและสามารถใช้งานภายในฟังก์ชัน main เท่านั้น ดังนั้น ตัวแปร p จะสิ้นสุดความเป็น object เมื่อ main() จบการทำงาน เมื่อกดปุ่มอะไรก็ได้บนคีย์บอร์ดเพื่อปิดโปรแกรม จะแสดงข้อความ Person dead ขึ้นมา

Person alive
Press any key to continue . . .
Person dead
Previous
Next Post »