Bahasa C
Dalam tutorial ini, kita akan belajar tentang overloading operator dengan bantuan contoh.
Dalam C++, kita dapat mengubah cara kerja operator untuk tipe yang ditentukan pengguna seperti objek dan struktur. Ini dikenal sebagai kelebihan operator . Misalnya,
Misalkan kita telah membuat tiga objek c1 , c2 dan hasil dari kelas bernama Complex
yang mewakili bilangan kompleks.
Karena kelebihan beban operator memungkinkan kita mengubah cara kerja operator, kita dapat mendefinisikan ulang cara +
operator bekerja dan menggunakannya untuk menambahkan bilangan kompleks c1 dan c2 dengan menulis kode berikut:
result = c1 + c2;
bukannya sesuatu seperti
result = c1.addNumbers(c2);
Ini membuat kode kita intuitif dan mudah dimengerti.
Catatan: Kami tidak dapat menggunakan kelebihan operator untuk tipe data dasar seperti int
, float
, char
dan seterusnya.
Untuk membebani operator, kami menggunakan operator
khusus fungsi. Kita mendefinisikan fungsi di dalam kelas atau struktur yang objek/variabelnya kita inginkan untuk digunakan oleh operator yang kelebihan beban.
class className {
... .. ...
public
returnType operator symbol (arguments) {
... .. ...
}
... .. ...
};
Di sini,
returnType
adalah tipe pengembalian fungsi.operator
adalah kata kunci.symbol
adalah operator yang ingin kita bebani. Seperti:+
, <
, -
, ++
, dll.arguments
adalah argumen yang diteruskan ke fungsi.
Operator unary hanya beroperasi pada satu operand. Operator kenaikan ++
dan operator penurunan --
adalah contoh dari operator unary.
// Overload ++ when used as prefix
#include <iostream>
using namespace std;
class Count {
private:
int value;
public:
// Constructor to initialize count to 5
Count() : value(5) {}
// Overload ++ when used as prefix
void operator ++ () {
++value;
}
void display() {
cout << "Count: " << value << endl;
}
};
int main() {
Count count1;
// Call the "void operator ++ ()" function
++count1;
count1.display();
return 0;
}
Keluaran
Count: 6
Di sini, ketika kita menggunakan ++count1;
, void operator ++ ()
disebut. Ini meningkatkan nilai atribut untuk objek count1 oleh 1.
Catatan: Ketika kita membebani operator, kita dapat menggunakannya untuk bekerja dengan cara apa pun yang kita suka. Misalnya, kita bisa menggunakan ++
untuk meningkatkan nilai dengan 100.
Namun, ini membuat kode kita membingungkan dan sulit dipahami. Adalah tugas kita sebagai programmer untuk menggunakan operator overloading dengan benar dan dengan cara yang konsisten dan intuitif.
Contoh di atas hanya berfungsi jika ++
digunakan sebagai awalan. Untuk membuat ++
bekerja sebagai postfix kami menggunakan sintaks ini.
void operator ++ (int) {
// code
}
Perhatikan int
di dalam tanda kurung. Ini adalah sintaks yang digunakan untuk menggunakan operator unary sebagai postfix; itu bukan parameter fungsi.
// Overload ++ when used as prefix and postfix
#include <iostream>
using namespace std;
class Count {
private:
int value;
public:
// Constructor to initialize count to 5
Count() : value(5) {}
// Overload ++ when used as prefix
void operator ++ () {
++value;
}
// Overload ++ when used as postfix
void operator ++ (int) {
value++;
}
void display() {
cout << "Count: " << value << endl;
}
};
int main() {
Count count1;
// Call the "void operator ++ (int)" function
count1++;
count1.display();
// Call the "void operator ++ ()" function
++count1;
count1.display();
return 0;
}
Keluaran
Count: 6 Count: 7
Contoh 2 bekerja ketika ++
digunakan sebagai prefiks dan postfiks. Namun, itu tidak akan berhasil jika kita mencoba melakukan sesuatu seperti ini:
Count count1, result;
// Error
result = ++count1;
Ini karena tipe kembalian dari fungsi operator kita adalah void
. Kita bisa menyelesaikan masalah ini dengan membuat Count
sebagai tipe kembalinya fungsi operator.
// return Count when ++ used as prefix
Count operator ++ () {
// code
}
// return Count when ++ used as postfix
Count operator ++ (int) {
// code
}
#include <iostream>
using namespace std;
class Count {
private:
int value;
public
:
// Constructor to initialize count to 5
Count() : value(5) {}
// Overload ++ when used as prefix
Count operator ++ () {
Count temp;
// Here, value is the value attribute of the calling object
temp.value = ++value;
return temp;
}
// Overload ++ when used as postfix
Count operator ++ (int) {
Count temp;
// Here, value is the value attribute of the calling object
temp.value = value++;
return temp;
}
void display() {
cout << "Count: " << value << endl;
}
};
int main() {
Count count1, result;
// Call the "Count operator ++ ()" function
result = ++count1;
result.display();
// Call the "Count operator ++ (int)" function
result = count1++;
result.display();
return 0;
}
Keluaran
Count: 6 Count: 6
Di sini, kami telah menggunakan kode berikut untuk overloading operator awalan:
// Overload ++ when used as prefix
Count operator ++ () {
Count temp;
// Here, value is the value attribute of the calling object
temp.value = ++value;
return temp;
}
Kode untuk overloading operator postfix juga serupa. Perhatikan bahwa kita telah membuat objek temp dan mengembalikan nilainya ke fungsi operator.
Perhatikan juga kodenya
temp.value = ++value;
Variabel nilai milik count1 objek di main()
karena count1 memanggil fungsi, sementara temp.value milik temp objek.
Operator biner bekerja pada dua operan. Misalnya,
result = num + 9;
Di sini, +
adalah operator biner yang bekerja pada operan num dan 9
.
Saat kita membebani operator biner untuk tipe yang ditentukan pengguna dengan menggunakan kode:
obj3 = obj1 + obj2;
Fungsi operator dipanggil menggunakan obj1 objek dan obj2 diteruskan sebagai argumen ke fungsi.
// C++ program to overload the binary operator +
// This program adds two complex numbers
#include <iostream>
using namespace std;
class Complex {
private:
float real;
float imag;
public:
// Constructor to initialize real and imag to 0
Complex() : real(0), imag(0) {}
void input() {
cout << "Enter real and imaginary parts respectively: ";
cin >> real;
cin >> imag;
}
// Overload the + operator
Complex operator + (const Complex& obj) {
Complex temp;
temp.real = real + obj.real;
temp.imag = imag + obj.imag;
return temp;
}
void output() {
if (imag < 0)
cout << "Output Complex number: " << real << imag << "i";
else
cout << "Output Complex number: " << real << "+" << imag << "i";
}
};
int main() {
Complex complex1, complex2, result;
cout << "Enter first complex number:\n";
complex1.input();
cout << "Enter second complex number:\n";
complex2.input();
// complex1 calls the operator function
// complex2 is passed as an argument to the function
result = complex1 + complex2;
result.output();
return 0;
}
Keluaran
Enter first complex number: Enter real and imaginary parts respectively: 9 5 Enter second complex number: Enter real and imaginary parts respectively: 7 6 Output Complex number: 16+11i
Dalam program ini, fungsi operatornya adalah:
Complex operator + (const Complex& obj) {
// code
}
Alih-alih ini, kita juga bisa menulis fungsi ini seperti:
Complex operator + (Complex obj) {
// code
}
Namun,
&
membuat kode kita efisien dengan mereferensikan complex2 objek alih-alih membuat objek duplikat di dalam fungsi operator.const
dianggap sebagai praktik yang baik karena mencegah fungsi operator memodifikasi complex2 .=
dan &
sudah kelebihan beban secara default di C++. Misalnya, untuk menyalin objek dari kelas yang sama, kita bisa langsung menggunakan =
operator. Kita tidak perlu membuat fungsi operator.::
(resolusi cakupan).
(pemilihan anggota).*
(pemilihan anggota melalui penunjuk ke fungsi)?:
(operator ternary)Kunjungi halaman ini untuk mempelajari lebih lanjut tentang:
Bahasa C
Kelebihan Fungsi C++ Dalam tutorial ini, kita akan belajar tentang fungsi overloading di C++ dengan contoh. Dalam C++, dua fungsi dapat memiliki nama yang sama jika jumlah dan/atau jenis argumen yang diteruskan berbeda. Fungsi-fungsi ini memiliki nama yang sama tetapi argumen yang berbeda dikenal
Rekursi C++ Dalam tutorial ini, kita akan belajar tentang fungsi rekursif di C++ dan cara kerjanya dengan bantuan contoh. Fungsi yang memanggil dirinya sendiri dikenal sebagai fungsi rekursif. Dan, teknik ini dikenal sebagai rekursi. Kerja Rekursi di C++ void recurse() { ... .. ... recurs
Array C++ Dalam tutorial ini, kita akan belajar bekerja dengan array. Kita akan belajar mendeklarasikan, menginisialisasi, dan mengakses elemen array dalam pemrograman C++ dengan bantuan contoh. Dalam C++, array adalah variabel yang dapat menyimpan beberapa nilai dengan tipe yang sama. Misalnya, M
Warisan C++ Dalam tutorial ini, kita akan belajar tentang pewarisan dalam C++ dengan bantuan contoh. Pewarisan adalah salah satu fitur utama pemrograman berorientasi objek di C++. Ini memungkinkan kita untuk membuat kelas baru (kelas turunan) dari kelas yang ada (kelas dasar). Kelas turunan mewari