Menu
CoddyTech

Penentu Akses dalam C++

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 34 dari 104.

C++ menyediakan tiga penentu akses yang mengatur siapa yang dapat mengakses anggota class: public, protected, dan private. Ketiganya menjadi dasar enkapsulasi.

class Account {
public:
    std::string ownerName;      // Dapat diakses dari mana saja
    
protected:
    double interestRate;        // Dapat diakses di class ini dan class turunannya
    
private:
    double balance;             // Hanya dapat diakses di dalam class ini
};

Anggota Public dapat diakses dari mana saja, di dalam class, dari class turunan, dan dari kode eksternal. Anggota Private paling membatasi, hanya dapat diakses di dalam class itu sendiri. Protected berada di antara keduanya. Aksesnya seperti private dari luar, tetapi class turunan dapat mengakses anggota ini.

class Account {
private:
    double balance;
    
public:
    Account() : balance(0) {}
    
    void deposit(double amount) {
        balance += amount;    // OK, di dalam class
    }
};

int main() {
    Account acc;
    acc.deposit(100);         // OK, deposit bersifat public
    // acc.balance = 500;     // ERROR, balance bersifat private
}

Secara default, semua member dalam class bersifat private jika tidak ada penentu yang diberikan. Ini mendorong kamu untuk menentukan secara eksplisit apa yang seharusnya diekspos. Praktik umum adalah menjadikan member data bersifat private dan menyediakan method publik untuk berinteraksi dengannya secara aman.

challenge icon

Tantangan

Mudah

Mari kita buat sistem manajemen karyawan sederhana untuk menunjukkan cara penentu akses mengatur siapa yang dapat mengakses apa. Kamu akan membuat class dengan sebagian data yang sepenuhnya private, sebagian dapat diakses oleh subclass potensial, dan sebagian terbuka untuk semua orang.

Kamu akan membuat dua file untuk mengatur kodemu:

  • Employee.h: Definisikan class Employee yang menggunakan ketiga penentu akses untuk melindungi data dengan tepat:
    • Public: name (string) milik karyawan. Ini dapat diakses dari mana saja
    • Protected: department (string) milik karyawan: dapat diakses di dalam class dan oleh derived class, tetapi tidak dari luar
    • Private: salary (double) milik karyawan: hanya dapat diakses di dalam class itu sendiri
    • Sebuah constructor yang menerima name, department, dan salary untuk menginisialisasi ketiga anggota
    • Method public getSalary() yang mengembalikan nilai salary private
    • Method public getDepartment() yang mengembalikan nilai department protected
    • Method public giveRaise(double amount) yang menaikkan salary sebesar jumlah yang diberikan, hanya jika jumlahnya positif
    • Method public displayInfo() yang mencetak informasi karyawan dalam format: "Name: <name>, Department: <department>, Salary: $<salary>"
  • main.cpp: Tunjukkan cara kerja penentu akses dengan berinteraksi dengan object Employee. Baca name, department, dan salary karyawan dari input (tiga baris terpisah), lalu:
    • Buat Employee dengan nilai input
    • Cetak name karyawan secara langsung dengan mengakses anggota public: "Direct access - Name: <name>"
    • Cetak department menggunakan getter: "Via getter - Department: <department>"
    • Cetak salary menggunakan getter: "Via getter - Salary: $<salary>"
    • Berikan kenaikan salary sebesar 5000.0 kepada karyawan
    • Cetak "After raise:"
    • Panggil displayInfo() untuk menampilkan informasi yang telah diperbarui

Format semua nilai salary dengan dua angka desimal menggunakan std::fixed dan std::setprecision(2) dari <iomanip>. Ubah input salary dari string menjadi double menggunakan std::stod().

Hal penting yang perlu dipahami adalah meskipun kamu dapat mengakses name secara langsung dari main, kamu tidak dapat mengakses department atau salary secara langsung. Kamu harus menggunakan method getter public. Inilah enkapsulasi dalam praktik: class mengatur cara datanya diakses dan diubah.

Coba sendiri

#include <iostream>
#include <string>
#include <iomanip>
#include "Employee.h"

using namespace std;

int main() {
    // Baca input
    string name;
    string department;
    string salaryStr;
    
    getline(cin, name);
    getline(cin, department);
    getline(cin, salaryStr);
    double salary = stod(salaryStr);
    
    // Atur presisi output gaji
    cout << fixed << setprecision(2);
    
    // TODO: Buat object Employee dengan nilai input
    
    // TODO: Cetak nama karyawan dengan mengakses anggota public secara langsung
    // Format: "Direct access - Name: <name>"
    
    // TODO: Cetak departemen menggunakan method getter
    // Format: "Via getter - Department: <department>"
    
    // TODO: Cetak gaji menggunakan method getter
    // Format: "Via getter - Salary: $<salary>"
    
    // TODO: Beri karyawan kenaikan gaji sebesar 5000.0
    
    // TODO: Cetak "After raise:"
    
    // TODO: Panggil displayInfo() untuk menampilkan informasi terbaru
    
    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