0Pricing
C++ Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. struct เทียบกับ class: ควรใช้แบบใด
  2. ตัวแปรสมาชิกและเมธอด
  3. คอนสตรักเตอร์และรายการเริ่มต้นสมาชิก
  4. พอยน์เตอร์ this และการห่อหุ้ม
← กลับไปที่ C++ Academy