Saya akan menambahkan jawaban yang ada karena C ++ modern sekarang menjadi sesuatu dan Panduan Inti resmi telah dibuat untuk membantu dengan pertanyaan seperti ini.
Berikut bagian yang relevan dari pedoman:
C.2: Gunakan kelas jika kelas memiliki invarian; gunakan struct jika anggota data dapat berbeda secara independen
Invarian adalah kondisi logis untuk anggota objek yang harus dibuat oleh konstruktor agar fungsi anggota publik dapat digunakan. Setelah invarian dibuat (biasanya oleh konstruktor) setiap fungsi anggota dapat dipanggil untuk objek tersebut. Suatu invarian dapat dinyatakan secara informal (misalnya, dalam komentar) atau secara lebih formal menggunakan Expects.
Jika semua anggota data dapat berbeda secara independen satu sama lain, tidak ada invarian yang memungkinkan.
Jika kelas memiliki data pribadi, pengguna tidak dapat sepenuhnya menginisialisasi objek tanpa menggunakan konstruktor. Oleh karena itu, definisi kelas akan menyediakan konstruktor dan harus menentukan artinya. Ini secara efektif berarti kebutuhan definer untuk mendefinisikan suatu invarian.
Pelaksanaan
Cari struct dengan semua data pribadi dan kelas dengan anggota publik.
Contoh kode yang diberikan:
struct Pair { // the members can vary independently
string name;
int volume;
};
// but
class Date {
public:
// validate that {yy, mm, dd} is a valid date and initialize
Date(int yy, Month mm, char dd);
// ...
private:
int y;
Month m;
char d; // day
};
Class
Ini bekerja dengan baik untuk anggota yang, misalnya, berasal dari satu sama lain atau saling terkait. Mereka juga dapat membantu dengan pemeriksaan kewarasan pada instansiasi. Struct
s bekerja dengan baik untuk memiliki "kantong data", di mana tidak ada hal istimewa yang benar-benar terjadi tetapi para anggota secara logis masuk akal untuk dikelompokkan bersama.
Dari sini, masuk akal bahwa class
ada untuk mendukung enkapsulasi dan konsep pengkodean terkait lainnya, yang struct
tidak terlalu berguna untuk itu.