Data Structure คือ กลุ่มของข้อมูลหลาย ๆ ชนิดมารวมอยู่ด้วยกัน
และ Class ก็เหมือน Structure คือกลุ่มของข้อมูลหลาย ๆ ชนิด แต่ยังมี Method อีกด้วย
สรุปคือ
Data Structure = Data
Class = Data + Methods
เพื่อความเข้าใจ ผมจะขอยกตัวอย่าง
ยังจำกันได้ไหมว่า structure ประกาศยังไง ?
struct human {
char name[255];
int age;
};
ถ้าเราต้องการที่จะประกาศ class เราก็แค่เปลี่ยนคำว่า struct เป็น class
class human {
char name[255];
int age;
};
เหมือนกันเลย แค่เปลี่ยนตัวหน้านิดเดียว
แต่ !! เมื่อเราสร้าง object (ตัวแปรของ class เราจะไม่เรียกว่าตัวแปร แต่จะเรียกว่า object แทน) ของ class human เราไม่สามารถที่จะเรียกสมาชิกในนั้นได้...
อย่างเช่น
human a;
เราจะไม่สามารถเรียก
a.name = "Name";
ได้ ทำไมถึงเป็นแบบนี้ ?
คำตอบคือ เพราะว่า class มีการปกป้องข้อมูลของตนเอง เพื่อจำกัดสิทธิ์ในการเข้าถึง
ในภาษา C++ รูปแบบสิทธิ์ของการเข้าถึงข้อมูลจะมี 3 แบบ (ใน Object Pascal มี 4 แบบ)
ได้แก่
- private
- public
- protected
เมื่อเราสร้างตัวแปรใน class แล้วไม่ได้กำหนดขอบเขตการเข้าถึง มันจะถูกกำหนดให้เป็น private โดยอัตโนมัติ
เมื่อขอบเขตถูกกำหนดเป็น private ตัวแปรนั้น ๆ จะไม่สามารถถูกเข้าถึงจากภายนอกได้ เราจึงไม่สามารถเรียก a.name ได้
ถ้าเราต้องการให้ตัวแปรนั้น ๆ สามารถถูกเรียกจากภายนอกได้ เราต้องกำหนดสิทธิ์เป็น public
เราจะได้หน้าตาของ class human แบบใหม่
class human {
public:
char name[255];
int age;
};
คราวนี้เราก็สามารถเรียก a.name ได้แล้ว
ถ้าเราต้องการกำหนดขอบเขตเป็น private ก็แค่ใส่ private: เข้าไป
ส่วน protected ผมขอยังไม่พูดถึงตอนนี้
แล้ว Method คืออะไร ?
ถ้าจะให้พูดง่าย ๆ เลย มันก็คือฟังก์ชันนั่นแหละ
ของดูตัวอย่าง class นี้
class triangle {
private:
float b, h;
public:
void setBase(float base)
{
b = base;
}
void setHight(float hight)
{
h = hight;
}
float getArea()
{
return 0.5 * b * h;
}
};
จะเห็นว่า เราไม่สามารถจะเรียกใช้ตัวแปร b กับ h ใน class นี้ได้
แต่เราสามารถเข้าถึงผ่านทาง function ที่อยู่ใน class แทน
ทำไมถึงต้องทำแบบนี้ ?
ก็เพราะ เพื่อไม่ให้ข้อมูลถูกแก้ไขตามใจชอบ สามารถป้องกันการเปลี่ยนข้อมูลแล้วเกิดข้อผิดพลาดได้อีกด้วย
เมื่อเราจะใช้เราก็เรียกผ่านฟังก์ชันพวกนี้ เช่น
triangle s;
s.setBase(4.2);
s.setHight(6.0);
cout << s.getArea() << endl;
class จะช่วยให้การเขียนโปรแกรมมีความยืดหยุดมากขึ้น
ยังเหลืออีกหลาย ๆ เรื่องเกี่ยวกับ class ที่ผมไม่ได้ยกมาพูดตอนนี้
แต่ผมจะมาพูดให้ฟังในคราวหน้า หวังว่าทุกท่านจะสนุกกับการสร้าง class นะครับ ^_^
No comments:
Post a Comment