• Tidak ada hasil yang ditemukan

C ++ Pointer dan Array

Dalam dokumen MODUL PRAKTIK TA. 2020/2021 (Halaman 157-183)

Tujuan :

Mahasiswa dapat menggunakan Penunjuk C ++, C ++ Pointer dan Array, dalam pembuatan program.

Sebagai latihan untuk meningkatkan kemampuan dalam membuat program.

C ++ Pointer dan Array

Dalam buku ini, kita akan belajar tentang hubungan antara array dan pointer dengan bantuan contoh. Di C ++, Pointer adalah variabel yang menyimpan alamat variabel lain. Penunjuk tidak hanya dapat menyimpan alamat variabel tunggal, tetapi juga dapat menyimpan alamat sel array .

Pertimbangkan contoh ini:

int *ptr; int arr[5]; // store the address of the first // element of arr in ptr ptr = arr;

Di sini, ptr adalah variabel penunjuk sedangkan arr adalah larik int . Kode ptr = arr;

menyimpan alamat elemen pertama dari array di variabel ptr .

Perhatikan bahwa kita telah menggunakan arr daripada &arr[0] . Ini karena keduanya sama. Jadi kode dibawah ini sama dengan kode diatas.

Modul Praktek Bahasa C++ Shell Marto Sihombing int *ptr; int arr[5]; ptr = &arr[0];

Alamat untuk elemen array lainnya diberikan oleh &arr[1] , &arr[2] , &arr[3] , dan &arr[4]

.

Arahkan ke Setiap Elemen Array

Misalkan kita perlu menunjuk ke elemen keempat dari array menggunakan pointer ptr yang sama.

Di sini, jika ptr menunjuk ke elemen pertama pada contoh di atas maka ptr + 3 akan menunjuk ke elemen keempat. Sebagai contoh,

int *ptr;

int arr[5];

ptr = arr;

ptr + 1 is equivalent to &arr[1];

ptr + 2 is equivalent to &arr[2];

ptr + 3 is equivalent to &arr[3];

ptr + 4 is equivalent to &arr[4];

Demikian pula, kita dapat mengakses elemen menggunakan penunjuk tunggal. Sebagai contoh,

// use dereference operator *ptr == arr[0]; *(ptr + 1) is equivalent to arr[1]; *(ptr + 2) is equivalent to arr[2]; *(ptr + 3) is equivalent to arr[3]; *(ptr + 4) is equivalent to arr[4];

Misalkan jika kita telah menginisialisasi ptr = &arr[2]; kemudian

ptr - 2 is equivalent to &arr[0]; ptr - 1 is equivalent to &arr[1]; ptr + 1 is equivalent to

&arr[3]; ptr + 2 is equivalent to &arr[4];

Bekerja dari C ++ Pointer dengan Array

Catatan: Alamat antara ptr dan ptr + 1 berbeda 4 byte. Itu karena ptr adalah penunjuk ke data int . Dan, ukuran int adalah 4 byte dalam sistem operasi 64-bit.

Demikian pula, jika pointer ptr menunjuk ke data tipe char , maka alamat antara ptr dan ptr + 1 adalah 1 byte. Karena ukuran karakter 1 byte.

Contoh 1: C ++ Pointer dan Array

// C++ Program to display address of each element of an array

#include <iostream>

Modul Praktek Bahasa C++ Shell Marto Sihombing using namespace std;

int main() { float arr[3]; // declare pointer variable float *ptr;

cout << "Displaying address using arrays: " << endl; // use for loop to print addresses of all array elements

for (int i = 0; i < 3; ++i) { cout << "&arr[" << i << "] = " << &arr[i] << endl; } // ptr =

&arr[0]

ptr = arr; cout<<"\nDisplaying address using pointers: "<< endl; // use for loop to print addresses of all array elements // using pointer notation

for (int i = 0; i < 3; ++i) { cout << "ptr + " << i << " = "<< ptr + i << endl; } return 0; }

Keluaran

Menampilkan alamat menggunakan array:

& arr [0] = 0x61fef0 & arr [1] = 0x61fef4 & arr [2] = 0x61fef8

Menampilkan alamat menggunakan pointer:

ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

Dalam program di atas, pertama-tama kita hanya mencetak alamat dari elemen array tanpa menggunakan variabel pointer ptr .

Kemudian, kami menggunakan penunjuk ptr untuk menunjuk ke alamat a [0] , ptr + 1 untuk menunjuk ke alamat a [1] , dan seterusnya.

Dalam kebanyakan konteks, nama array meluruh menjadi pointer. Dengan kata sederhana, nama array diubah menjadi pointer. Itulah alasan mengapa kita bisa menggunakan pointer untuk mengakses elemen array.

Namun, kita harus ingat bahwa pointer dan array tidak sama.

Ada beberapa case di mana nama array tidak rusak menjadi pointer. Untuk mempelajari lebih lanjut, kunjungi: Kapan nama array tidak rusak menjadi pointer?

Contoh 2: Nama array digunakan sebagai penunjuk

// C++ Program to insert and display data entered by using pointer notation.

#include <iostream>

using namespace std;

int main() { float arr[5]; // Insert data using pointer notation cout << "Enter 5 numbers: ";

Modul Praktek Bahasa C++ Shell Marto Sihombing 3.5

4.5 5 2

Menampilkan data:

2.5 3.5 4.5 5 2 Sini,

1. Kami pertama kali menggunakan notasi pointer untuk menyimpan angka yang dimasukkan oleh pengguna ke dalam array arr .

cin >> *(arr + i) ;

Kode ini sama dengan kode di bawah ini:

cin >> arr[i];

Perhatikan bahwa kami belum mendeklarasikan variabel pointer terpisah, tetapi kami menggunakan nama array arr untuk notasi pointer.

Seperti yang telah kita ketahui, nama array arr menunjuk ke elemen pertama dari array. Jadi, kita dapat menganggap arr sebagai penunjuk.

2. Demikian pula, kami kemudian menggunakan for loop untuk menampilkan nilai-nilai arr menggunakan notasi pointer.

cout << *(arr + i) << endl ; Kode ini setara dengan cout << arr[i] << endl ;

Panggilan C ++ dengan Referensi: Menggunakan pointer [Dengan Contoh]

Dalam bagian ini, kita akan belajar tentang panggilan C ++ dengan referensi meneruskan pointer sebagai argumen ke fungsi dengan bantuan contoh.

Dalam bagian C ++ Functions , kita belajar tentang meneruskan argumen ke suatu fungsi.

Metode yang digunakan ini disebut passing by value karena nilai sebenarnya dilewatkan.

Namun, ada cara lain untuk meneruskan argumen ke fungsi yang nilai argumen sebenarnya tidak diteruskan. Sebaliknya, referensi ke nilai diteruskan.

Sebagai contoh,

// function that takes value as parameter void func1(int numVal) { // code } // function that takes reference as parameter // notice the & before the parameter void func2(int &numRef) { // code } int main() { int num = 5; // pass by value func1(num); // pass by reference func2(num); return 0; }

Perhatikan & in void func2(int &numRef) . Ini menunjukkan bahwa kami menggunakan alamat variabel sebagai parameter kami.

Jadi, ketika kita memanggil fungsi func2() di main() dengan meneruskan variabel num sebagai argumen, kita sebenarnya mengirimkan alamat variabel num alih-alih nilai 5 .

Modul Praktek Bahasa C++ Shell Marto Sihombing C ++ Pass by Value vs. Pass by Reference

Contoh 1: Melewati referensi tanpa petunjuk

#include <iostream>

using namespace std; // function definition to swap values void swap(int &n1, int &n2) {

int temp; temp = n1; n1 = n2; n2 = temp; } int main() { // initialize variables int a = 1, b = 2;

cout << "Before swapping" << endl;

cout << "a = " << a << endl;

cout << "b = " << b << endl; // call function to swap numbers swap(a, b); cout << "\nAfter swapping" << endl;

cout << "a = " << a << endl;

cout << "b = " << b << endl;

return 0; } Keluaran

Sebelum bertukar a = 1

b = 2

Setelah bertukar a = 2

b = 1

Dalam program ini, kami mengirimkan variabel a dan b ke fungsi swap() . Perhatikan definisi fungsinya,

void swap(int &n1, int &n2)

Di sini, kami menggunakan & untuk menunjukkan bahwa fungsi tersebut akan menerima alamat sebagai parameternya.

Oleh karena itu, kompilator dapat mengidentifikasi bahwa alih-alih nilai aktual, referensi variabel diteruskan ke parameter fungsi.

Modul Praktek Bahasa C++ Shell Marto Sihombing Dalam fungsi swap() , parameter fungsi n1 dan n2 menunjuk ke nilai yang sama dengan variabel a dan b masing-masing. Karenanya pertukaran terjadi pada nilai aktual.

Tugas yang sama bisa dilakukan dengan menggunakan pointer. . Contoh 2: Melewati referensi menggunakan pointer

#include <iostream>

using namespace std; // function prototype with pointer as parameters void swap(int*, int*);

int main() { // initialize variables int a = 1, b = 2;

cout << "Before swapping" << endl;

cout << "a = " << a << endl;

cout << "b = " << b << endl; // call function by passing variable addresses swap(&a, &b);

cout << "\nAfter swapping" << endl;

cout << "a = " << a << endl; cout << "b = " << b << endl;

return 0; } // function definition to swap numbers void swap(int* n1, int* n2) {

int temp; temp = *n1; *n1 = *n2; *n2 = temp; } Keluaran

Sebelum bertukar a = 1

b = 2

Setelah bertukar a = 2

b = 1

Di sini, kita bisa melihat keluarannya sama dengan contoh sebelumnya. Perhatikan garisnya,

// &a is address of a // &b is address of b swap(&a, &b);

Di sini, alamat variabel diteruskan selama pemanggilan fungsi daripada variabel.

Karena alamat diberikan alih-alih nilai, operator dereferensi * harus digunakan untuk mengakses nilai yang disimpan di alamat itu.

temp = *n1; *n1 = *n2; *n2 = temp;

*n1 dan *n2 memberikan nilai yang disimpan di alamat n1 dan n2 masing-masing.

Karena n1 dan n2 berisi alamat a dan b , apa pun yang dilakukan ke *n1 dan * n2 akan mengubah nilai sebenarnya dari a dan b .

Karenanya, ketika kita mencetak nilai a dan b dalam fungsi main() , nilainya berubah.

C ++ Memory Management: baru dan hapus

Dalam bagian ini, kita akan belajar mengelola memori secara efektif di C ++

menggunakan operasi baru dan hapus dengan bantuan contoh.

C ++ memungkinkan kita mengalokasikan memori variabel atau array dalam waktu proses.

Ini dikenal sebagai alokasi memori dinamis.

Dalam bahasa pemrograman lain seperti Java dan Python, kompilator secara otomatis mengelola memori yang dialokasikan ke variabel. Tapi ini tidak terjadi di C ++.

Modul Praktek Bahasa C++ Shell Marto Sihombing Di C ++, kita perlu membatalkan alokasi memori yang dialokasikan secara dinamis secara manual setelah kita tidak menggunakan variabel.

Kita dapat mengalokasikan dan kemudian melepas alokasi memori secara dinamis menggunakan operator new dan delete masing-masing.

C ++ Operator baru

Operator new mengalokasikan memori ke variabel. Sebagai contoh,

// declare an int pointer int* pointVar; // dynamically allocate memory // using the new keyword pointVar = new int; // assign value to allocated memory *pointVar = 45;

Di sini, kami telah mengalokasikan memori secara dinamis untuk variabel int menggunakan operator new .

Perhatikan bahwa kita telah menggunakan pointer pointVar untuk mengalokasikan memori secara dinamis. Ini karena operator new mengembalikan alamat lokasi memori.

Dalam case array, operator new mengembalikan alamat elemen pertama dari array.

Dari contoh di atas, kita dapat melihat bahwa sintaks untuk menggunakan operator new adalah

pointerVariable = new dataType;

hapus Operator

Setelah kita tidak lagi perlu menggunakan variabel yang telah kita deklarasikan secara dinamis, kita dapat membatalkan alokasi memori yang ditempati oleh variabel tersebut.

Untuk ini, operator delete digunakan. Ini mengembalikan memori ke sistem operasi. Ini dikenal sebagai deallocation memori .

Sintaks untuk operator ini adalah delete pointerVariable;

Perhatikan kodenya:

// declare an int pointer int* pointVar; // dynamically allocate memory // for an int variable pointVar = new int; // assign value to the variable memory *pointVar = 45; // print the value stored in memory cout << *pointVar; // Output: 45 // deallocate the memory delete pointVar;

Di sini, kami telah mengalokasikan memori secara dinamis untuk variabel int menggunakan pointer pointVar .

Setelah mencetak konten pointVar , kami membatalkan alokasi memori menggunakan delete .

Catatan : Jika program menggunakan sejumlah besar memori yang tidak diinginkan menggunakan yang new , sistem mungkin macet karena tidak akan ada memori yang tersedia untuk sistem operasi. Dalam hal ini, operator delete dapat membantu sistem dari crash.

Contoh 1: C ++ Dynamic Memory Allocation

#include <iostream>

using namespace std;

int main() { // declare an int pointer int* pointInt; // declare a float pointer float*

pointFloat; // dynamically allocate memory pointInt = new int; pointFloat = new float;

// assigning value to the memory *pointInt = 45; *pointFloat = 45.45f;

cout << *pointInt << endl;

cout << *pointFloat << endl; // deallocate the memory delete pointInt, pointFloat;

return 0; }

Modul Praktek Bahasa C++ Shell Marto Sihombing Keluaran

45 45.45

Dalam program ini, kami mengalokasikan memori secara dinamis ke dua variabel tipe int dan float . Setelah menetapkan nilai ke mereka dan mencetaknya, kami akhirnya

membatalkan alokasi memori menggunakan kode delete pointInt, pointFloat;

Catatan: Alokasi memori dinamis dapat membuat manajemen memori lebih efisien.

Khususnya untuk array, dimana seringkali kita tidak mengetahui ukuran dari array tersebut hingga waktu prosesnya.

Contoh 2: C ++ baru dan hapus Operator untuk Array

// C++ Program to store GPA of n number of students and display it // where n is the number of students entered by the user

#include <iostream>

Masukkan jumlah total siswa: 4 Masukkan IPK siswa.

Dalam program ini, kami meminta pengguna untuk memasukkan jumlah siswa dan menyimpannya dalam variabel num.

Modul Praktek Bahasa C++ Shell Marto Sihombing Kemudian, kami telah mengalokasikan memori secara dinamis untuk float array menggunakan new .

Kami memasukkan data ke dalam array (dan kemudian mencetaknya) menggunakan notasi pointer.

Setelah kita tidak lagi membutuhkan array, kita delete [] ptr; memori array menggunakan kode delete [] ptr; .

Perhatikan penggunaan [] setelah delete . Kami menggunakan tanda kurung siku [] untuk menunjukkan bahwa deallokasi memori adalah array.

Contoh 3: C ++ baru dan hapus Operator untuk Objek

#include <iostream>

using namespace std;

class Student { int age; public: // constructor initializes age to 12 Student() : age(12) {}

void getAge() { cout << "Age = " << age << endl; } };

int main() { // dynamically declare Student object Student* ptr = new Student(); // call getAge() function ptr->getAge(); // ptr memory is released delete ptr;

return 0; } Keluaran Umur = 12

Dalam program ini, kami telah membuat kelas Student yang memiliki usia variabel privat.

Kami telah menginisialisasi usia ke 12 dalam konstruktor default Student() dan mencetak nilainya dengan fungsi getAge() .

Di main() , kita telah membuat objek Student menggunakan operator new dan menggunakan pointer ptr untuk menunjuk ke alamatnya.

Saat objek dibuat, konstruktor Student() menginisialisasi usia ke 12 . Kami kemudian memanggil fungsi getAge() menggunakan kode:

ptr->getAge();

Perhatikan operator panah -> . Operator ini digunakan untuk mengakses anggota kelas menggunakan pointer.

C ++ Warisan

Dalam bagian ini, kita akan belajar tentang pewarisan di C ++ dengan bantuan contoh.

Pewarisan adalah salah satu fitur utama dari pemrograman berorientasi objek di C ++. Ini memungkinkan kita untuk membuat kelas baru (kelas turunan) dari kelas yang ada (kelas dasar).

Kelas turunan mewarisi fitur dari kelas dasar dan dapat memiliki fitur tambahannya sendiri. Sebagai contoh,

class Animal { // eat() function // sleep() function }; class Dog : public Animal { // bark() function };

Di sini, kelas Dog diturunkan dari kelas Animal . Karena Dog berasal dari Animal , anggota Animal dapat diakses oleh Dog .

Modul Praktek Bahasa C++ Shell Marto Sihombing Warisan di C ++

Perhatikan penggunaan kata kunci public saat mewarisi Anjing dari Hewan.

class Dog : public Animal {...};

Kami juga dapat menggunakan kata kunci private dan protected bukan public . Kita akan belajar tentang perbedaan antara menggunakan private , public dan protected nanti dalam bagian ini.

adalah-hubungan

Warisan adalah suatu hubungan . Kami menggunakan warisan hanya jika ada hubungan is -a antara dua kelas.

Berikut beberapa contohnya:

Mobil adalah kendaraan.

Jeruk adalah buah.

Seorang ahli bedah adalah seorang dokter.

Seekor anjing adalah binatang.

Contoh 1: Contoh Sederhana Warisan C ++

// C++ program to demonstrate inheritance #include <iostream> using namespace std; //

base class class Animal { public: void eat() { cout << "I can eat!" << endl; } void sleep() { cout << "I can sleep!" << endl; } }; // derived class class Dog : public Animal { public:

void bark() { cout << "I can bark! Woof woof!!" << endl; } }; int main() { // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep();

// Calling member of the derived class dog1.bark(); return 0; } Keluaran

Saya bisa makan!

Saya bisa tidur!

Saya bisa menggonggong! Guk guk!!

Di sini, dog1 (objek dari kelas turunan Dog ) dapat mengakses anggota kelas dasar Animal . Itu karena Dog diwarisi dari Animal .

// Calling members of the Animal class dog1.eat(); dog1.sleep();

Modul Praktek Bahasa C++ Shell Marto Sihombing Anggota yang dilindungi C ++

Pengubah akses yang protected sangat relevan jika berhubungan dengan pewarisan C ++.

Seperti anggota private , anggota yang protected tidak dapat diakses di luar kelas. Namun, mereka dapat diakses oleh kelas turunan dan kelas / fungsi teman .

Kita membutuhkan anggota yang protected jika kita ingin menyembunyikan data dari sebuah kelas, tetapi tetap ingin data tersebut diwarisi oleh kelas turunannya.

Contoh 2: Anggota yang dilindungi C ++

// C++ program to demonstrate protected members #include <iostream> #include <string>

using namespace std; // base class class Animal { private: string color; protected: string type; public: void eat() { cout << "I can eat!" << endl; } void sleep() { cout << "I can sleep!" << endl; } void setColor(string clr) { color = clr; } string getColor() { return color;

} }; // derived class class Dog : public Animal { public: void setType(string tp) { type = tp;

} void displayInfo(string c) { cout << "I am a " << type << endl; cout << "My color is " <<

c << endl; } void bark() { cout << "I can bark! Woof woof!!" << endl; } }; int main() { //

Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat();

dog1.sleep(); dog1.setColor("black"); // Calling member of the derived class dog1.bark();

dog1.setType("mammal"); // Using getColor() of dog1 as argument // getColor() returns string data dog1.displayInfo(dog1.getColor()); return 0; }

Keluaran

Saya bisa makan!

Saya bisa tidur!

Saya bisa menggonggong! Guk guk!!

Saya mamalia Warna saya hitam

Di sini, tipe variabel protected dan dengan demikian dapat diakses dari kelas turunan Dog . Kita bisa melihat ini karena kita telah menginisialisasi type di kelas Dog menggunakan fungsi setType() .

Di sisi lain, warna variabel private tidak dapat diinisialisasi di Dog .

class Dog : public Animal { public: void setColor(string clr) { // Error: member

"Animal::color" is inaccessible color = clr; } };

Selain itu, karena kata kunci yang protected menyembunyikan data, kita tidak dapat mengakses tipe secara langsung dari objek kelas Dog atau Animal .

// Error: member "Animal::type" is inaccessible dog1.type = "mammal";

Mode Akses di C ++ Inheritance

Sejauh ini, kami telah menggunakan kata kunci public untuk mewarisi kelas dari kelas dasar yang sudah ada sebelumnya. Namun, kita juga dapat menggunakan kata kunci private dan protected untuk mewarisi kelas. Sebagai contoh,

class Animal { // code }; class Dog : private Animal { // code };

class Cat : protected Animal { // code };

Berbagai cara kita dapat memperoleh kelas dikenal sebagai mode akses . Mode akses ini memiliki efek berikut:

1. publik: Jika kelas turunan dideklarasikan dalam mode public , maka anggota kelas dasar diwarisi oleh kelas turunan sebagaimana adanya.

2. private: Dalam hal ini, semua anggota kelas dasar menjadi anggota private di kelas turunan.

Modul Praktek Bahasa C++ Shell Marto Sihombing 3. dilindungi: Anggota public dari kelas dasar menjadi anggota yang protected di

kelas turunan.

Anggota private dari kelas dasar selalu private di kelas turunan.

Fungsi Anggota Menggantikan dalam Warisan

Misalkan, kelas dasar dan kelas turunan memiliki fungsi anggota dengan nama dan argumen yang sama.

Jika kita membuat objek dari kelas turunan dan mencoba mengakses fungsi anggota itu, fungsi anggota di kelas turunan akan dipanggil alih-alih yang ada di kelas dasar.

Fungsi anggota kelas turunan menggantikan fungsi anggota kelas dasar.

Bacaan yang Direkomendasikan: C ++ Multiple Inheritance

C ++ Function Overriding

Dalam bagian ini, kita akan belajar tentang function overriding di C ++ dengan bantuan contoh.

Seperti yang kita ketahui, inheritance merupakan fitur OOP yang memungkinkan kita membuat kelas turunan dari kelas dasar. Kelas turunan mewarisi fitur dari kelas dasar.

Misalkan, fungsi yang sama didefinisikan di kelas turunan dan kelas berbasis. Sekarang jika kita memanggil fungsi ini menggunakan objek dari kelas turunan, fungsi kelas turunan akan dieksekusi.

Ini dikenal sebagai penggantian fungsi di C ++. Fungsi di kelas turunan menggantikan fungsi di kelas dasar.

Contoh 1: Penggantian Fungsi C ++

// C++ program to demonstrate function overriding #include <iostream> using namespace std; class Base { public: void print() { cout << "Base Function" << endl; } }; class Derived : public Base { public: void print() { cout << "Derived Function" << endl; } }; int main() { Derived derived1; derived1.print(); return 0; }

Keluaran

Fungsi Turunan

Di sini, fungsi print() sama didefinisikan di kelas Base dan Derived .

Jadi, saat kita memanggil print() dari objek Derived1 , print() dari Derived dijalankan dengan menimpa fungsi di Base .

Modul Praktek Bahasa C++ Shell Marto Sihombing Cara kerja penggantian fungsi di C ++

Akses Fungsi yang Diganti di C ++

Untuk mengakses fungsi yang diganti dari kelas dasar, kita menggunakan operator resolusi lingkup :: .

Kita juga dapat mengakses fungsi yang ditimpa dengan menggunakan penunjuk kelas dasar untuk menunjuk ke objek dari kelas turunan dan kemudian memanggil fungsi dari penunjuk tersebut.

Contoh 2: C ++ Access Overridden Function ke Base Class

// C++ program to access overridden function // in main() using the scope resolution operator :: #include <iostream> using namespace std; class Base { public: void print() { cout << "Base Function" << endl; } }; class Derived : public Base { public: void print() { cout << "Derived Function" << endl; } }; int main() { Derived derived1, derived2;

derived1.print(); // access print() function of the Base class derived2.Base::print(); return 0;

}

Keluaran

Fungsi Turunan Fungsi Dasar Ini, pernyataan ini derived2.Base::print();

mengakses fungsi print() dari kelas Base.

Modul Praktek Bahasa C++ Shell Marto Sihombing Akses fungsi yang diganti menggunakan objek dari kelas turunan di C ++

Contoh 3: C ++ Call Overridden Function From Derived Class

// C++ program to call the overridden function // from a member function of the derived class

#include <iostream>

using namespace std;

class Base { public: void print() { cout << "Base Function" << endl; } };

class Derived : public Base { public: void print() { cout << "Derived Function" << endl;

print(); } };

int main() {

Derived derived1; derived1.print();

return 0; } Keluaran

Fungsi Turunan Fungsi Dasar

Dalam program ini, kami telah memanggil fungsi yang ditimpa di dalam kelas Derived itu sendiri.

class Derived : public Base { public: void print() { cout << "Derived Function" << endl;

Base::print(); } };

Perhatikan kode Base::print(); , yang memanggil fungsi yang diganti di dalam kelas

Perhatikan kode Base::print(); , yang memanggil fungsi yang diganti di dalam kelas

Dalam dokumen MODUL PRAKTIK TA. 2020/2021 (Halaman 157-183)