struct vs class
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 37 dari 104.
Dalam C++, struct dan class hampir identik. Keduanya dapat memiliki variabel anggota, fungsi anggota, konstruktor, dan mendukung pewarisan. Satu-satunya perbedaan adalah tingkat akses default.
Dalam class, anggota secara default bersifat private. Dalam struct, anggota secara default bersifat public:
struct Point {
int x; // public secara default
int y; // public secara default
};
class Circle {
double radius; // private secara default
public:
double getRadius() { return radius; }
};Ini juga berlaku untuk pewarisan. struct mewarisi secara publik secara default, sedangkan class mewarisi secara privat:
struct DerivedStruct : Base {}; // pewarisan public
class DerivedClass : Base {}; // pewarisan privateSelain nilai default ini, tidak ada perbedaan teknis. Namun, konvensi tetap penting.
Sebagian besar programmer C++ menggunakan struct untuk wadah data sederhana dengan anggota publik (seperti koordinat atau konfigurasi), dan class ketika enkapsulasi dan perilaku penting. Mengikuti konvensi ini membuat maksud kodemu lebih jelas bagi developer lain.
Tantangan
MudahMari buat sistem konfigurasi sederhana yang menunjukkan kapan menggunakan struct dibandingkan dengan class berdasarkan konvensi C++. Kamu akan membuat struct untuk data sederhana yang dimaksudkan agar dapat diakses secara terbuka, dan class untuk data yang memerlukan enkapsulasi dan akses terkendali.
Kamu akan membuat dua file untuk mengatur kodemu:
Config.h: Definisikanstructdanclassyang mewakili berbagai jenis data konfigurasi.Pertama, buat
structbernamaDimensions: wadah data sederhana untuk lebar dan tinggi (keduanya bertipeint). Karena anggota struct bersifat publik secara default, anggota ini harus dapat diakses langsung tanpa getter. Sertakan methodarea()yang mengembalikan hasil perkalian lebar dan tinggi.Lalu, buat
classbernamaAppConfigyang mengelola pengaturan aplikasi dengan enkapsulasi yang tepat. class ini harus menyimpan nama aplikasi (string) dan objectDimensionsuntuk ukuran jendela. Karena anggota class bersifat privat secara default, kamu perlu secara eksplisit membuat antarmuka publiknya dapat diakses. Sediakan:- Konstruktor yang menerima nama aplikasi, lebar, dan tinggi
- Getter
getAppName()yang mengembalikan nama - Getter
getWindowSize()yang mengembalikanDimensions - Method
displayConfig()yang mencetak:"App: <name>, Window: <width>x<height>, Area: <area>"
main.cpp: Tunjukkan perbedaan penggunaan struct dan class. Baca nama aplikasi, lebar, dan tinggi dari input (tiga baris terpisah), lalu:- Buat struct
Dimensionssecara langsung dengan nilai lebar dan tinggi: akses anggotanya secara langsung untuk mencetak:"Direct struct access: <width> x <height>" - Buat object
AppConfigdengan ketiga nilai - Panggil
displayConfig()untuk menampilkan konfigurasi lengkap - Gunakan getter untuk mengambil dimensi jendela dan mencetak:
"Via getter - Area: <area>"
- Buat struct
Tantangan ini menyoroti konvensi: gunakan struct saat kamu memiliki data sederhana dan transparan (seperti koordinat atau dimensi), dan gunakan class saat kamu ingin mengendalikan akses dan menambahkan perilaku pada datamu.
Ubah input lebar dan tinggi dari string menjadi bilangan bulat menggunakan std::stoi(). Jangan lupa menyertakan header guard di file header-mu.
Coba sendiri
#include <iostream>
#include <string>
#include "Config.h"
using namespace std;
int main() {
// Baca input
string appName;
string widthStr;
string heightStr;
getline(cin, appName);
getline(cin, widthStr);
getline(cin, heightStr);
int width = stoi(widthStr);
int height = stoi(heightStr);
// TODO: Buat struct Dimensions dengan width dan height
// Akses anggotanya secara langsung untuk mencetak: "Direct struct access: <width> x <height>"
// TODO: Buat object AppConfig dengan appName, width, dan height
// TODO: Panggil displayConfig() pada object AppConfig
// TODO: Gunakan getter getWindowSize() untuk mendapatkan dimensi dan mencetak: "Via getter - Area: <area>"
return 0;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar-Dasar OOP
File EksternalBuild dan Kompilasi C++File Header dan File SourceNamespace dan CakupanPengantar OOP dalam C++class vs objectPointer 'this'method (Fungsi Anggota)Atribut (Anggota Data)Dasar Ctor dan DtorRingkasan: Kalkulator Sederhana4Properti class
Anggota instance vs staticGetter dan setterFungsi anggota constKata kunci mutableMethod dan variabel staticFungsi dan class friendRangkuman, Pengelola Rekening Bank7Pewarisan
Pewarisan DasarTingkat Akses pada PewarisanUrutan Pemanggilan Ctor & DtorPenimpaan methodFungsi Virtual & VTablePewarisan BergandaPewarisan VirtualRangkuman: Hierarki Karyawan2Manajemen Memori
Memori Stack vs HeapPointer dan ReferenceMemori Dinamis (new/delete)Smart Pointer di C++RAII di C++Rangkuman: Pengelola Array Dinamis5Enkapsulasi
Penentu Akses dalam C++Penentu Akses secara MendalamPenyembunyian Informasistruct vs classNested dan Inner classRangkuman, Sistem Catatan Siswa8Polimorfisme
Polimorfisme saat Compile vs RuntimeOverloading FungsiMeninjau Kembali Fungsi VirtualFungsi Virtual MurniKelas AbstrakDesain Interface di C++Casting Dinamis & RTTIRangkuman: Kalkulator Bentuk3Konstruktor & Destruktor
Konstruktor DefaultKonstruktor BerparameterKonstruktor SalinKonstruktor PindahDaftar Inisialisasi KonstruktorKonstruktor DelegasiKupas Tuntas DestruktorAturan Tiga, Lima, dan NolRangkuman: class String6Overloading Operator
Pengantar Overloading OperatorOverloading Operator AritmetikaOverloading Operator PerbandinganOperator StreamOverloading Operator PenugasanOverloading Operator [] dan ()Operator Konversi TipeRingkasan, class Matrix9Template
Template FungsiTemplate classSpesialisasi TemplateTemplate VariadikDasar SFINAE & Type TraitsRangkuman, Container GenerikLatihan sendiri: Compiler C++ online