จากบทความ C++ OOP การสร้าง Class และการใช้งาน Class ผมอธิบายถึงการสร้าง Object แบบ Stack แต่ในบทความนี้ผมจะอธิบายเรื่องการสร้าง Object โดยใช้ Pointer ข้อแตกต่างกันคือ การสร้าง Object แบบ Stack จะคล้ายๆกับเราสร้างตัวแปรขึ้นมาตัวนึงเมื่อใช้งานเสร็จหรือจบโปรแกรม ระบบจะคืน memory หรือทําลาย Object นั้นทิ้งให้โดยอัตโนมัติ แต่ถ้าสร้าง Object แบบ Pointer จะไม่ทําลาย Object ให้เราเมื่อจบโปรแกรม เราจะต้องเป็นคนทําลาย Object เอง ทําสั่งที่ใช้ ทําลาย Object คือ “delete” ตามด้วย Object ที่ต้องการลบ _ถ้าเราไม่ลบ Object ที่เราสร้างขึ้น ระบบจะไม่สามารถเข้าใช้งาน memory ในส่วนนั้นได้ ทําให้เกิด memory leak _
ตัวอย่างการสร้าง Pointer Object
ไฟล์ cal.h
#include <stdio.h>
class cal{
public:
int plus(int a, int b);
int increase(int a);
private:
int increaseNum;
};
มีรายละเอียดดังนี้
- ชื่อ Class: cal
- method:
- int plus(int a, int b); <— Public
- int increase(int a); <— Public
- field:
- int increaseNum; <—Private
เมื่อเราเขียน file header(*.h) เรียบร้อยเราก็จะมาเขียน ไฟล์เนื้อหา หรือการทํางานของ Class กันครับ โดยจะมีนามสกุล *.cpp ไฟล์ cal.cpp
#include <cal.h>
int cal::plus(int a, int b){
return a+b;
}
int cal::increase(int a){
increaseNum = 1;
return(a+increaseNum);
}
เท่านี้เราก็จะได้ Class cal ตามที่ต้องการแล้วครับ ต่อมาเมื่อเราต้องการนํา Class นี้มาใช้งาน ในตัวอย่างนี้เราจะสร้าง main.cpp ขึ้นมาโดยมีเนื้อหาดังนี้ ไฟล์ main.cpp
#include <stdio.h>
#include <cal.h>
int main(void){
cal *objCal;
objCal = new cal();
printf("Return from method plus: %d\n", objCal->plus(1,2));
delete objCal;
return(0);
}
การ compile จะต้อง compile cal.cpp และ main.cpp ให้เป็น Object(*.o) ไฟล์ก่อน แล้วจึงนํา object ไฟล์มา compile รวมกันเป็น Execute ไฟล์อีกที compile cal.cpp ได้ออกมาเป็นไฟล์ cal.o
g++ -I[path include] -c cal.cpp
- [path include]คือ path ของ directory ที่เรา include เข้ามา ถ้าเรา include ไฟล์ cal.h เข้ามา โดยที่ไฟล์ cal.h อยู่ใน directory “/home/user/test/” ให้เราระบุเป็น “/home/user/test/”
compile main.cpp ได้ออกมาเป็นไฟล์ main.o
g++ -I[path include] -c main.cpp
- [path include]คือ path ของ directory ที่เรา include เข้ามา ถ้าเรา include ไฟล์ cal.h เข้ามา โดยที่ไฟล์ cal.h อยู่ใน directory “/home/user/test/” ให้เราระบุเป็น “/home/user/test/”
compile ครั้งสุดท้ายเพื่อรวมทุกไฟล์ให้เป็น Execute ออกมาโดยใช้ชื่อ “mainexe”
g++ cal.o main.o -o mainexe