struct เทียบกับ class: ควรใช้แบบใด
ทำความเข้าใจความแตกต่างที่แท้จริงเพียงประการเดียวระหว่าง struct กับ class และนำหลักการใช้งานทั่วไปไปใช้
struct เทียบกับ class: ควรใช้แบบใด เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
กลไกเดียวกัน ค่าเริ่มต้นต่างกัน
ใน C++ โครงสร้างและคลาสแทบเหมือนกันทุกประการ ความแตกต่างระดับภาษาเพียงอย่างเดียวคือตัวระบุการเข้าถึงเริ่มต้น
โครงสร้าง: สาธารณะโดยค่าเริ่มต้น
ใน struct สมาชิกจะเป็นสาธารณะ เว้นแต่จะระบุเป็นอย่างอื่น
struct Point {
int x;
int y;
}; // x and y are publicคลาส: ส่วนตัวโดยค่าเริ่มต้น
ใน class สมาชิกจะเป็นส่วนตัว เว้นแต่จะระบุเป็นสาธารณะ
class Counter {
int n_ = 0; // private
public:
void increment() { n_++; }
int value() const { return n_; }
};ธรรมเนียม ไม่ใช่แค่ไวยากรณ์
ชุมชน C++ ใช้คีย์เวิร์ดทั้งสองเพื่อสื่อเจตนา:
struct— ข้อมูลแบบไม่ทำงาน (คล้าย POD และเป็นสาธารณะทั้งหมด)class— พฤติกรรมที่ถูกห่อหุ้ม (สถานะส่วนตัวพร้อมอินเทอร์เฟซสาธารณะ)
ควรใช้ struct เมื่อใด
ใช้ struct สำหรับการรวมข้อมูลแบบเรียบง่าย เช่น พิกัด สี RGB และระเบียนอย่างง่าย
struct Point { int x; int y; };
struct Color { unsigned char r, g, b, a; };
struct Person { std::string name; int age; };ควรใช้ class เมื่อใด
ใช้ class เมื่อมี invariant ที่ต้องปกป้อง เมื่อสถานะเปลี่ยนผ่านเมธอด หรือเมื่อจำเป็นต้องมีการห่อหุ้ม
class BankAccount {
double balance_ = 0.0; // protected invariant
public:
void deposit(double amount);
bool withdraw(double amount);
double balance() const;
};การเริ่มต้นค่าแบบการรวมข้อมูล
โครงสร้างที่มีแต่สมาชิกสาธารณะสามารถเริ่มต้นค่าด้วยไวยากรณ์วงเล็บปีกกา โดยระบุค่าตามลำดับที่ประกาศ
struct Point { int x; int y; };
Point p1{3, 4}; // aggregate init
Point p2{.x = 3, .y = 4}; // designated init (C++20)inheritance ก็แตกต่างกันด้วย
inheritance เป็นสาธารณะโดยค่าเริ่มต้นสำหรับ struct และเป็นส่วนตัวโดยค่าเริ่มต้นสำหรับ class หากไม่แน่ใจ ให้ระบุอย่างชัดเจน
class B {};
struct D1 : B {}; // public inheritance
class D2 : B {}; // private inheritanceสมาชิกแบบผสม
แม้ค่าเริ่มต้นจะแตกต่างกัน แต่คีย์เวิร์ดทั้งสองสามารถใช้ส่วน public, private และ protected ได้
struct Config {
private:
int internalCount = 0;
public:
std::string name;
void incrementCount() { ++internalCount; }
};การอ่านโค้ดจากคีย์เวิร์ด
เมื่อเห็น struct ให้คาดว่าจะพบฟิลด์ข้อมูล เมื่อเห็น class ให้คาดว่าจะพบตรรกะที่ถูกห่อหุ้ม ให้มองคีย์เวิร์ดเป็นคำใบ้เกี่ยวกับเจตนาของผู้เขียน
แนวทางการเขียนโค้ด
แนวทางการเขียนโค้ดส่วนใหญ่ (Google, LLVM, ISO C++ Core) แนะนำให้ใช้ struct เฉพาะสำหรับการรวมข้อมูลแบบไม่ทำงานที่ไม่มี invariant สิ่งใดก็ตามที่มีเมธอดซับซ้อนจะกลายเป็นคลาส
ตรวจสอบความเข้าใจ
ความแตกต่างระดับภาษาเพียงอย่างเดียวระหว่าง struct และ class ใน C++ คืออะไร
สรุปทบทวน
ใช้ struct สำหรับการรวมข้อมูลแบบเรียบง่าย และใช้ class สำหรับชนิดข้อมูลที่มี invariant และพฤติกรรม ความแตกต่างระดับภาษามีเพียงการเข้าถึงเริ่มต้น — แต่ตามธรรมเนียมแล้วทั้งสองแบบมีการใช้งานแตกต่างกันมาก
คำถามที่พบบ่อย
บทเรียน “struct เทียบกับ class: ควรใช้แบบใด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “struct เทียบกับ class: ควรใช้แบบใด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “struct เทียบกับ class: ควรใช้แบบใด”
ทำความเข้าใจความแตกต่างที่แท้จริงเพียงประการเดียวระหว่าง struct กับ class และนำหลักการใช้งานทั่วไปไปใช้ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “struct เทียบกับ class: ควรใช้แบบใด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- struct เทียบกับ class: ควรใช้แบบใด
- ตัวแปรสมาชิกและเมธอด
- คอนสตรักเตอร์และรายการเริ่มต้นสมาชิก
- พอยน์เตอร์ this และการห่อหุ้ม