คำตอบที่รวดเร็ว:
มันขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุ
ยาวขยายเพิ่มเติมคำตอบที่น่าเบื่อ:
คุณโดนเล็บ
ฉันมักจะไม่ชอบที่ "C ++" อนุญาตให้ "Struct (s)" อนุญาตให้ประกาศวิธีการ ฉันใช้ "Class (es)" อย่างชัดเจนสำหรับวิธีการที่จำเป็นและ POD "Struct (s)" สำหรับฟิลด์เท่านั้น
กระนั้นฉันยอมรับว่าการดำเนินการพื้นฐานบางอย่างง่าย ๆ เช่น:
- กำหนดค่าเริ่มต้น ("ตัวสร้าง")
- ทำสำเนาของโครงสร้าง ("ตัวสร้างสำเนา)
- กำหนดค่าให้กับโครงสร้างที่มีอยู่ ("ตัวดำเนินการกำหนดภาระเกิน")
มีความจำเป็นและในกรณีเหล่านี้มีวิธีการในการสร้างโครงสร้างที่เหมาะสม
ข้อเสนอแนะ
วิธีแก้ปัญหาที่เป็นไปได้อีกอย่างหนึ่งคือการใช้โครงสร้าง POD แต่ก็ยังถือว่าแนวคิดเป็นคลาสและวัตถุ
ล้อมประกาศในเนมสเปซและเพิ่มฟังก์ชั่นทั่วโลกสำหรับการกระทำที่สำคัญที่สุด
การประกาศรหัสอาจคล้ายกับสิ่งนี้:
namespace Customers
{
struct CustomerStruct
{
char[255] FirstName;
char[255] LastName;
int Age;
bool IsAlive;
bool IsMarried;
}; // struct
CustomerStruct* CreateCustomer
(
char* NewFirstName;
char* NewLastName;
int NewAge;
bool NewIsAlive;
bool NewIsMarried;
)
{
CustomerStruct* NewCustomer = new CustomerStruct();
NewCustomer->FirstName = NewFirstName;
NewCustomer->LastName = NewLastName;
NewCustomer->Age = NewAge;
NewCustomer->IsAlive = NewIsAlive;
NewCustomer->IsMarried = NewIsMarried;
return NewCustomer;
} // CustomerStruct* CreateCustomer (...)
} // namespace
รหัสที่ใช้โซลูชันอาจเป็นดังนี้:
#include <Customers>
using Customers;
int main (...)
{
int ErrorCode = 0;
CustomerClass* ThisCustomer =
Customers::CreateCustomer
("John", "Doe", 23, true, true);
// do something with "ThisCustomer"
delete ThisCustomer;
return ErrorCode;
} // int main(...)
วิธีการทางเลือกนี้จะดีกว่าเมื่อต้องมีการจัดสรรหน่วยความจำขนาดใหญ่ของข้อมูลหรือโต้ตอบกับไลบรารีที่แบ่งใช้ระดับต่ำอื่น ๆ
วิธีการนี้มีการเปลี่ยนแปลงบางอย่างในการพัฒนาเกม
พิเศษ
โดยส่วนตัวแล้วฉันพิจารณาส่วนขยายไวยากรณ์สำหรับ "C ++" หรือแม้กระทั่ง PL ที่ใช้ "C ++" ใหม่ที่แก้ปัญหานี้:
// "Plain Old Data" Structure
// No Methods, No "Functors", allowed
strict struct CustomerStruct
{
char[255] FirstName;
char[255] LastName;
int Age;
bool IsAlive;
bool IsMarried;
}; // strict struct
// Object Oriented "Plain Old Data" Structure
// Yes, Methods and "Functors" allowed
relaxed struct CustomerStruct
{
char[255] FirstName;
char[255] LastName;
int Age;
bool IsAlive;
bool IsMarried;
public void Foo();
public void Bar();
public (void*) (SomeFunctor) ();
}; // relaxed struct
// Class and Object Oriented
class CustomerClass
{
public char[255] FirstName;
public char[255] LastName;
public int Age;
public bool IsAlive;
public bool IsMarried;
public void Foo();
public void Bar();
}; // class
ไชโย