Menu
CoddyTech

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 private

Selain 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.

challenge icon

Tantangan

Mudah

Mari 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: Definisikan struct dan class yang mewakili berbagai jenis data konfigurasi.

    Pertama, buat struct bernama Dimensions: wadah data sederhana untuk lebar dan tinggi (keduanya bertipe int). Karena anggota struct bersifat publik secara default, anggota ini harus dapat diakses langsung tanpa getter. Sertakan method area() yang mengembalikan hasil perkalian lebar dan tinggi.

    Lalu, buat class bernama AppConfig yang mengelola pengaturan aplikasi dengan enkapsulasi yang tepat. class ini harus menyimpan nama aplikasi (string) dan object Dimensions untuk 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 mengembalikan Dimensions
    • 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 Dimensions secara langsung dengan nilai lebar dan tinggi: akses anggotanya secara langsung untuk mencetak: "Direct struct access: <width> x <height>"
    • Buat object AppConfig dengan ketiga nilai
    • Panggil displayConfig() untuk menampilkan konfigurasi lengkap
    • Gunakan getter untuk mengambil dimensi jendela dan mencetak: "Via getter - Area: <area>"

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;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online