Berbagi teknologi

[C]Paket

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Pengertian kemasan

Enkapsulasi adalah salah satu dari tiga fitur dasar pemrograman berorientasi objek (OOP) (enkapsulasi, pewarisan, polimorfisme). Ini mengacu pada penggabungan data (properti) dan metode (fungsi) untuk mengoperasikan data ini ke dalam unit independen (kelas), menyembunyikan detail internal objek sebanyak mungkin, dan hanya mengekspos antarmuka ke dunia luar. Tujuannya adalah untuk melindungi data objek, mencegah kode eksternal mengakses langsung struktur data internal objek, mengurangi kesalahan, dan menyederhanakan kompleksitas.

2. Tujuan pengemasan

  1. menyembunyikan data: Melindungi data objek dari akses eksternal langsung dan mencegah data diubah secara ilegal.
  2. Antarmuka yang jelas: Dengan mengekspos antarmuka (metode) terbatas, kode eksternal hanya dapat berinteraksi dengan objek melalui antarmuka ini, sehingga memperjelas perilaku objek.
  3. Modular: Merangkum data dan operasi terkait bersama-sama untuk meningkatkan modularitas dan penggunaan kembali kode.

3. Metode untuk mengimplementasikan enkapsulasi di C++

  1. Menggunakan Kelas : Saat mendefinisikan kelas, atur anggota data (properti) sebagai pribadi atau dilindungi, dan atur metode pengoperasian data ini sebagai publik. Dengan cara ini, kode eksternal tidak dapat mengakses anggota privat kelas secara langsung, tetapi hanya dapat mengaksesnya secara tidak langsung melalui metode publik.

  2. pengubah akses

    • public: Dapat diakses oleh kode eksternal apa pun.
    • protected: Hanya dapat diakses di kelas itu sendiri dan kelas turunannya (subkelas).
    • private: Hanya dapat diakses di dalam kelas itu sendiri, bukan kelas turunan.
  3. Konstruktor dan destruktor : Inisialisasi objek melalui konstruktor dan bersihkan sumber daya yang ditempati oleh objek melalui destruktor. Mereka juga merupakan bagian dari enkapsulasi karena mengontrol siklus hidup objek.

4. Contoh

Di bawah ini adalah contoh pembungkus C++ sederhana yang menunjukkan aRectangleImplementasi kelas (persegi panjang).

  1. #include <iostream>
  2. class Rectangle {
  3. private:
  4. double width; // 矩形的宽
  5. double height; // 矩形的高
  6. public:
  7. // 构造函数
  8. Rectangle(double w, double h) : width(w), height(h) {}
  9. // 设置宽度
  10. void setWidth(double w) {
  11. width = w;
  12. }
  13. // 获取宽度
  14. double getWidth() const {
  15. return width;
  16. }
  17. // 设置高度
  18. void setHeight(double h) {
  19. height = h;
  20. }
  21. // 获取高度
  22. double getHeight() const {
  23. return height;
  24. }
  25. // 计算面积
  26. double getArea() const {
  27. return width * height;
  28. }
  29. };
  30. int main() {
  31. Rectangle rect(5.0, 10.0);
  32. std::cout << "Rectangle area: " << rect.getArea() << std::endl;
  33. rect.setWidth(7.0);
  34. std::cout << "New Rectangle area: " << rect.getArea() << std::endl;
  35. return 0;
  36. }

Dalam contoh ini,RectangleumumwidthDanheight Properti dijadikan pribadi dan kode eksternal tidak dapat mengaksesnya secara langsung.Sebaliknya, kami menggunakan metode publik sepertisetWidthgetHeightDangetArea ) untuk mengakses dan mengubah properti pribadi ini. Metode ini mengimplementasikan enkapsulasi data dan menyediakan antarmuka yang jelas untuk penggunaan eksternal.