Structure
เป็นโครงสร้างที่สามารถเก็บตัวแปรหลายๆชนิดไว้เป็นกลุ่มเดียวกันเช่น
struct Address {
const char* name;
int number;
const char* street;
const char* province;
const char* zip;
double income;
};
การเรียกใช้สามารถเรียกใช้ structure จะต้องมีการประกาศตัวแปรของ structure ก่อนซึ่งทำได้ 2 วิธี
int main()
{
//ประกาศตัวแปร (customer) แล้วตามด้วย '.' และตามด้วยตัวแปรที่ต้องการ
Address customer;
customer.name = "Johny Deb";
customer.number = 84;
customer.street = "Paholyothin";
customer.province = "Pathumtanee";
customer.zip = "12000";
customer.income = 150000;
//ประกาศตัวแปรแล้วเท่ากับ {ตัวแปรย่อย} แต่วิธีการนี้จะต้องเรียงลำดับของตัวแปรย่อยให้ตรงกับใน structure ด้วย
Address cust2 = {
"Lisa BP",
36,
"Vibhavadee-Rangsit",
"Bangkok",
"11000",
250000
};
}
ตัวอย่างการเรียกใช้ structure
//เรียกผ่าน pointer
void print_address(Address* p)
{
cout << p->name << "\n"
<< p->number << "\n"
<< p->street << "\n"
<< p->province << "\n"
<< p->zip << "\n"
;
}
//Reference
void print_addr(Address& p)
{
cout << p.name << "\n"
<< p.number << "\n"
<< p.street << "\n"
<< p.province << "\n"
<< p.zip << "\n"
;
}
void print_addr2(Address p)
{
cout << p.name << "\n"
<< p.number << "\n"
<< p.street << "\n"
<< p.province << "\n"
<< p.zip << "\n"
;
}
int main()
{
Address customer;
customer.name = "Johny Deb";
customer.number = 84;
customer.street = "Paholyothin";
customer.province = "Pathumtanee";
customer.zip = "12000";
customer.income = 150000;
Address cust2 = {
"Lisa BP",
36,
"Vibhavadee-Rangsit",
"Bangkok",
"11000",
250000
};
print_address(&customer);
print_addr(customer);
print_addr2(customer);
}
structure สามารถส่งผ่านฟังก์ชั่นและ return กลับได้
Address current;
Address set_current(Address next)
{
Address prev = current;
current = next;
return prev;
}
การจัดเรียงข้อมูล
structure จะจัดข้อมูลในเมโมรีเป็นกลุ่มดังตัวอย่าง
struct Readout {
char hour;
int value;
char seq;
};

ในเมมโมรีจะเป็นการเรียงต่อๆกันของข้อมูลโดยข้อมูลตัวแรกจะอยู่ใน address ที่น้อยกว่าเรียงลำดับกันไป โดยตัวแปรที่ใช้เมมโมรีมากสุดจะเป็นตัวกำหนดขนาดของ structure เช่นดังรูปด้านซ้าย sizeof(Readout) จะมีขนาด 12 byte เนื่องจาก int ใช้เมมโมรี 4 byte
//เรียงข้อมูลใหม่
struct Readout {
int value;
char hour;
char seq;
};

เราสามารถจัดเรียงข้อมูลใหม่เพื่อให้ใช้เมมโมรีได้น้อยลงได้โดยให้ตัวแปรที่มากสุดอยู่อันดับแรกแล้วจัดกลุ่มให้ตัวแปรใหม่ ดังตัวอย่าง sizeof(Readout) จะมีขนาดเพียง 8 byte เนื่องจาก int ใช้ 4 byte และ char 1 byte ใช้สำหรับ hour,seq 2 byte เหลือพื้นที่ไม่ได้ใช้อีก 2 byte
struct สามารถมีฟังก์ชั่นภายใน struct ได้เหมือนกับ class เช่น
struct Point {
int x, y;
};
struct Points {
vector elem;
Points(Point p0) { elem.push_back(p0); }
Points(Point p0, Point p1) { elem.push_back(p0); elem.push_back(p1); }
};
int main()
{
Points x1{ {100,200} };
Points x2{ {100,200},{300,400} };
cout << x1.elem[0].x << "," << x1.elem[0].y << "\n"
<< x2.elem[1].x << "," << x2.elem[1].y << "\n";
}
