CATATAN DIGITAL
B.TECH
(I TAHUN – II SEM)
(2018-19)
LNVETOLEARN&PELAJARI
Tujuan
• Untuk mengajarkan siswa konsep pemrograman berorientasi objek dan prosedur
• Untuk membedakan antara fungsi, kelas dan objek
• Untuk belajar membebani fungsi dan operator
• Untuk merancang aplikasi menggunakan teknik manajemen memori dinamis
• Untuk mengajar siswa untuk mengimplementasikan pemrograman generik dan penanganan
pengecualian
Unit I
Pengantar Pemrograman Berorientasi Objek: Paradigma berorientasi objek-Perbedaan antara
Pemrograman Berorientasi Objek dan Pemrograman berorientasi prosedur, Konsep dasar
Pemrograman Berorientasi Objek, Enkapsulasi, Pewarisan dan Polimorfisme, Manfaat OOP, Struktur
program C++, namespace, Tipe data, token C++ , Pengidentifikasi, Variabel, Konstanta, Operator,
Struktur Kontrol & Loop.
Unit-II
Fungsi, Kelas, dan Objek:
Pengenalan Kelas, Definisi Kelas, Mendefinisikan Anggota, Objek, Kontrol Akses, Lingkup Kelas,
Operator Resolusi Lingkup, Fungsi Inline, Alokasi Memori untuk Objek, Anggota Data Statis, Fungsi
Anggota Statis, Array Objek, Objek sebagai Argumen Fungsi, Fungsi Teman .
Unit-III
Konstruktor, Destruktor, Warisan:
Pengantar Konstruktor, Konstruktor Default, Konstruktor Berparameter, Salin Konstruktor, Banyak
Konstruktor dalam Kelas, Destruktur.
Warisan :
Pengantar pewarisan, Mendefinisikan Kelas Turunan, Warisan Tunggal, Warisan Berganda, Warisan
Bertingkat, Warisan Hirarkis, Warisan Hibrida.
Unit-IV
Pointer, Fungsi Virtual, dan Polimorfisme:
Pengantar Manajemen memori, operator baru dan operator hapus, Pointer ke objek, Pointer ke Kelas
Turunan, Polimorfisme, Kompilasi polimorfisme waktu, Polimorfisme waktu berjalan, Fungsi Virtual,
Overloading- Fungsi Overloading, Overloading operator.
Unit-V
Penanganan Templat dan Pengecualian:
Pengantar Templat, Templat Kelas, Templat Kelas dengan Banyak Parameter, Templat Fungsi,
Templat Fungsi dengan Banyak Parameter.
Penanganan pengecualian:
Dasar-dasar Penanganan Eksepsi, Jenis-Jenis Eksepsi, Mekanisme Penanganan Eksepsi, Mekanisme
Melempar dan Menangkap, Memutar Ulang Eksepsi, Menentukan Eksepsi.
Hasil:
• Untuk membedakan pemrograman berorientasi objek dan pemrograman prosedural.
• Untuk membangun kelas, fungsi dan objek
• Untuk mengimplementasikan konstruktor, destruktor, dan pewarisan
• Untuk mengembangkan program menggunakan teknik manajemen memori dinamis
• Untuk menerapkan penanganan pengecualian dan pemrograman generik.
Buku Teks:
1. Pemrograman Berorientasi Objek dengan C++ oleh Balagurusamy
2. C++, Referensi Lengkap, Edisi ke -4, Herbert Schildt, TMH.
Referensi:
1. C++ Primer, Edisi ke -3, SBLippman dan J.Lajoie, Pearson Education.
2. Bahasa Pemrograman C++, Edisi ke -3, B.Stroutstrup, Pearson Educ
UNIT 1
Abstraksi data :
Abstraksi mengacu pada tindakan merepresentasikan fitur-fitur penting tanpa menyertakan
detail atau penjelasan latar belakang. Kelas menggunakan konsep abstraksi dan didefinisikan sebagai daftar
atribut seperti ukuran, berat, biaya dan fungsi untuk beroperasi pada atribut tersebut. Mereka merangkum semua
sifat penting dari objek yang akan dibuat. Atribut disebut sebagai anggota data karena mereka menyimpan data
dan fungsi yang beroperasi pada data ini disebut sebagai fungsi anggota.
Class menggunakan konsep abstraksi data sehingga disebut abstract data type (ADT)
Polimorfisme: Polimorfisme berasal dari kata Yunani "poli" dan "morfisme". "poli" berarti banyak dan
"morfisme" berarti bentuk yaitu. banyak bentuk. Polimorfisme berarti kemampuan untuk mengambil lebih dari
satu bentuk. Misalnya, suatu operasi memiliki perilaku yang berbeda dalam kasus yang berbeda. Perilaku
tergantung pada jenis data yang digunakan dalam operasi.
Berbagai cara untuk mencapai polimorfisme dalam program C++:
1) Overloading fungsi 2) Overloading operator
#termasuk<iostream>
menggunakan ruang nama
std; int main() { int a=4; a=a<<2;
cout<<”a=”<<a<<endl;
kembali 0;
}
Warisan: Warisan adalah proses di mana satu objek dapat memperoleh properti dari objek lain.
Warisan adalah konsep OOP yang paling menjanjikan, yang membantu mewujudkan tujuan membangun
perangkat lunak dari bagian yang dapat digunakan kembali, daripada mengkodekan setiap sistem secara manual
dari awal. Pewarisan tidak hanya mendukung penggunaan kembali di seluruh sistem, tetapi juga secara langsung
memfasilitasi ekstensibilitas dalam suatu sistem. Pewarisan digabungkan dengan polimorfisme dan pengikatan
dinamis meminimalkan jumlah kode yang ada untuk dimodifikasi sambil meningkatkan sistem.
Ketika anak kelas mewarisi induk kelas, anak kelas disebut sebagai kelas turunan (sub kelas) dan kelas
induk sebagai kelas dasar (kelas super). Dalam hal ini, anak kelas memiliki dua bagian: bagian turunan dan
bagian inkremental. Bagian turunan diwariskan dari induk kelas. Bagian inkremental adalah kode baru yang
ditulis khusus untuk anak kelas.
Pengikatan dinamis:
Pengikatan mengacu pada penautan panggilan prosedur ke kode yang akan dieksekusi sebagai respons
terhadap panggilan. Pengikatan dinamis (atau pengikatan terlambat) berarti kode yang terkait dengan panggilan
prosedur yang diberikan tidak diketahui hingga waktu panggilan pada waktu berjalan.
Pengiriman pesan:
Program berorientasi objek terdiri dari sekumpulan objek yang saling berkomunikasi.
Objek berkomunikasi satu sama lain dengan mengirim dan menerima informasi.
Pesan untuk objek adalah permintaan untuk eksekusi prosedur dan oleh karena itu memanggil fungsi yang
dipanggil untuk objek dan menghasilkan hasil
Mudah Dipelihara dan Ditingkatkan : OOP memudahkan untuk memelihara dan memodifikasi kode yang ada
karena objek baru dapat dibuat dengan perbedaan kecil dari yang sudah ada. Kompleksitas perangkat lunak dapat
dengan mudah dikelola.
Message Passing: Teknik komunikasi pesan antar objek membuat antarmuka dengan sistem eksternal lebih mudah.
Modifiability: mudah untuk membuat perubahan kecil dalam representasi data atau prosedur dalam
program OO. Perubahan di dalam kelas tidak memengaruhi bagian lain dari suatu program, karena satu-
satunya antarmuka publik yang dimiliki dunia luar ke kelas adalah melalui penggunaan metode.
STRUKTUR DASAR BAHASA C++ : Program yang ditulis dalam bahasa C++ mengikuti struktur dasar ini.
Urutan bagian harus seperti pada struktur dasar. Program AC harus memiliki satu atau lebih bagian tetapi urutan
bagian harus diikuti.
1. bagian Dokumentasi
2. Bagian menghubungkan
3. Bagian definisi
4. Bagian deklarasi global & deklarasi kelas
5. Definisi fungsi anggota
6. Fungsi utama
bagian utama() {
Bagian deklarasi Bagian yang dapat dieksekusi
1. BAGIAN DOKUMENTASI : didahulukan dan digunakan untuk mendokumentasikan penggunaan
logika atau alasan dalam program Anda. Ini dapat digunakan untuk menulis detail tujuan, pengembang, dan
logika program. Dokumentasi dilakukan dalam bahasa C dengan /* dan */ . Apa pun yang tertulis di antara
keduanya disebut komentar.
2. LINKING SECTION : Bagian ini memberi tahu kompiler untuk menautkan kemunculan kata
kunci atau fungsi tertentu dalam program Anda ke file header yang ditentukan di bagian ini.
misalnya # sertakan<iostream>
menggunakan namespace std;
direktif menyebabkan preprosesor menambahkan konten file iostream ke program. Ini berisi deklarasi untuk cout dan cin.
>
cout adalah objek standar yang mewakili aliran output standar. Operator << adalah sebuah
operator penyisipan, menyebabkan string dalam tanda kutip ganda ditampilkan di layar.
Pernyataan cin>>n; adalah pernyataan input dan menyebabkan program menunggu pengguna mengetikkan angka.
Angka yang dikunci ditempatkan pada variabel "n". Pengidentifikasi cin adalah objek yang telah ditentukan
sebelumnya dalam C++ yang sesuai dengan aliran input standar. Operator >> dikenal sebagai operator ekstraksi.
Itu mengekstrak nilai dari keyboard dan menugaskannya ke variabel nilai di sebelah kanannya.
misalnya
5. SUB PROGRAM ATAU FUNGSI BAGIAN : Ini memiliki semua sub program atau fungsi yang
dibutuhkan program kita.
tampilan kosong()
{
cout<<”C++ lebih baik dari C”;
}
PROGRAM 'C++' SEDERHANA:
#termasuk<iostream>
menggunakan namespace std;
tampilan kosong()
{
cout<<”C++ lebih baik dari C”;
}
int utama()
{
menampilkan()
kembali 0;
}
6. BAGIAN FUNGSI UTAMA : Ini memberi tahu kompiler tempat memulai eksekusi dari main()
{
titik dari eksekusi dimulai
}
fungsi utama memiliki dua bagian
1. bagian deklarasi : Dalam hal ini variabel dan tipe datanya dideklarasikan.
2. Bagian yang dapat dieksekusi atau bagian instruksi : Ini memiliki bagian dari program yang benar-
benar melakukan tugas yang kita butuhkan.
ruang nama:
namespace digunakan untuk menentukan ruang lingkup yang dapat menampung pengidentifikasi
global.
ex: -namespace scope untuk pustaka standar c++.
Kelas, fungsi, dan templat dideklarasikan di dalam namespace bernama
std menggunakan namespace std;-->direktif dapat digunakan.
namespace namespace_name
{
//deklarasi variabel.fungsi,kelas dll...
}
mantan:
#termasuk<iostream>
menggunakan namespace std;
sampel ruang nama
{`
int m;
tampilan batal (int n)
{
cout<<"di namespace N="<<n<<endl;
}
}
#termasuk<iostream>
Arahan ini menyebabkan preprosesor menambahkan konten file iostream ke program. beberapa versi lama
C++ menggunakan iostream.h .jika kompiler tidak mendukung ANSI (lembaga standar negara amerika)
C++ maka gunakan file header iostream.h
JENIS DATA:
Tipe data digunakan untuk menunjukkan tipe nilai data yang disimpan dalam variabel. Semua kompiler C
mendukung berbagai tipe data. Jenis data yang beragam ini memungkinkan pemrogram untuk memilih
jenis yang sesuai dengan kebutuhan aplikasi maupun mesin. ANSI C mendukung kelas data berikut
, । । .......
Ditandatangani sedikit Besarnya
MSB (bit paling signifikan)
100(10)=00000000001100100(2)
Representasi bilangan negatif :
-100(10)=1111111110011100(2)
Bilangan bulat yang tidak ditandatangani : Bilangan bulat yang tidak ditandatangani menggunakan semua 16
bit untuk menyimpan besarnya. Nomor toko tidak memiliki tanda & Kualifikasi ukuran dan rentang tipe data
bilangan bulat pada mesin 16-bit dan ditunjukkan pada tabel:
DIBUTUHKAN MEMORI
JANGKAUAN
ATAU UKURAN PENYIMPANAN SPESIFIKA
TIPE DATA DALAM
TURBO CBYTES
GCC/ COMPILER DI TURBO C (16 BIT) GCC SI FORMAT
LINUX (32 BIT)
(16 BIT) (32 BIT)
int pendek
-32768
atau -32768
2 2 Ke 32767 %hd
Ke 32767 (-2 ke
ditandatangani +2 -1) (-2 ke +2 -1)
pendek int
int pendek
0 hingga 65535 (0 0 hingga 65535 (0 hingga
atau hingga +2 -1) +2 -1)
ditandatangani int 2 2 %hu
pendek
Angka floating point mewakili bilangan real dengan presisi 6 digit menempati 4 byte memori.
Variabel floating point dideklarasikan dengan kata kunci float.
Tipe data floating point ganda menempati 8 byte memori memberikan 14 digit presisi. Ini juga dikenal sebagai
angka presisi ganda. Variabel yang dideklarasikan dengan kata kunci double long double mengacu pada tipe data
floating point yang seringkali lebih tepat daripada presisi ganda.
Ukuran dan jangkauan tipe data floating point ditunjukkan pada tabel:
Tipe data Ukuran (memori) Jangkauan penentu format
(kata kunci)
Mengambang 32 bit (4 byte) 3.4E-38t03.4E+38 %F
Dobel 64 bit (8 byte) 1.7E-308 hingga I.7E +308 %jika
ganda panjang 80 bit (10 byte) 3.4E-4932 hingga Lf
B tipe data oolean: - 1.1E+4932
Tipe data boolean atau logika adalah tipe data yang memiliki dua nilai (biasanya dilambangkan benar dan
salah), dimaksudkan untuk mewakili nilai kebenaran logika dan aljabar Boolean. Dinamai setelah George Boole,
yang pertama kali mendefinisikan sistem logika aljabar pada pertengahan abad ke-19. Tipe data Boolean adalah
hasil utama dari pernyataan bersyarat, yang memungkinkan tindakan yang berbeda dan mengubah aliran kontrol
tergantung pada apakah kondisi Boolean yang ditentukan pemrogram mengevaluasi ke benar atau salah.
C99 menambahkan tipe Boolean (true/false) yang didefinisikan di <stdbool.h> variabel Boolean header
didefinisikan oleh kata kkey bool; Mantan:
bool b;
di mana b adalah variabel yang dapat menyimpan true(1) of false (0)
Tipe kosong
Tipe void tidak memiliki nilai . Ini biasanya digunakan untuk menentukan jenis pengembalian fungsi. Jenis fungsi dikatakan
batal ketika tidak mengembalikan nilai apa pun ke fungsi pemanggil. Ini juga digunakan untuk mendeklarasikan pointer
tujuan umum yang disebut void pointer.
Tipe data turunan.
Tipe data turunan adalah Arrays , penunjuk dan referensi adalah contoh untuk tipe data turunan.
Tipe data yang ditentukan pengguna:
mereka Tipe data yang ditentukan oleh pengguna dikenal sebagai tipe data yang ditentukan pengguna.
Mereka adalah struktur, persatuan, kelas dan pencacahan
Token C++
IDENTIFIERS: Identifiers adalah nama yang diberikan untuk berbagai elemen program seperti variabel, fungsi
dan array. Ini adalah nama yang ditentukan pengguna yang terdiri dari urutan huruf dan angka.
Aturan untuk mendeklarasikan pengidentifikasi:
Karakter pertama harus alfabet atau garis bawah.
> Itu harus terdiri dari hanya huruf, angka dan garis bawah.
Pengidentifikasi dapat memiliki panjang berapa pun tetapi hanya 31 karakter pertama yang signifikan.
> Itu tidak boleh berisi ruang putih atau ruang kosong.
Kita tidak boleh menggunakan kata kunci sebagai pengidentifikasi.
> Huruf besar dan kecil berbeda.
Contoh: ab Ab aB AB diperlakukan berbeda
Contoh pengidentifikasi yang valid:
a, x, n, num, SUM, fakta, grand_total, sum_of_digits, sum1
Contoh pengidentifikasi tidak valid : $ jumlah, ³ num ´ , grand - total, jumlah digit, 4num.
$ jumlah : Karakter khusus tidak diizinkan
grand - total : tanda hubung tidak diizinkan.
jumlah digit : spasi kosong di antara kata-kata tidak diperbolehkan.
4num : tidak boleh dimulai dengan angka (karakter pertama harus berupa huruf atau garis bawah
Catatan: Beberapa kompiler C hanya mengenali 8 karakter pertama saja; karena itu mereka tidak dapat
membedakan pengidentifikasi dengan kata-kata yang panjangnya lebih dari delapan karakter.
Deklarasi variabel: Deklarasi variabel memberikan nama untuk lokasi memori dan ukurannya dan
menentukan rentang nilai yang dapat disimpan di lokasi
Sintaksis:
tersebut.
nama variabel tipe data;
Mantan: 10 2000
int a=10;
mengapung x=2.3; X 2.300000 5000
KATA KUNCI :
Ada kata-kata tertentu, yang disebut kata kunci (reserved words) yang memiliki arti yang telah
ditentukan dalam bahasa „C++ ‟ . Kata kunci ini hanya untuk digunakan untuk tujuan yang dimaksudkan dan
bukan sebagai pengidentifikasi.
Tabel berikut menunjukkan kata kunci 'C++' standar
mobil merusak kasus arang const melanjutkan
bawaan Mengerjakan dobel kalau tidak enum eksternal
mengambang untuk pergi ke jika int panjang
daftar kembali pendek tertanda ukuran dari statis
struct mengalihkan typedef Persatuan tidak ruang kosong
tidak stabil ketika kelas teman ditandatangani
baru menghapus
ini publik pribadi terlindung Di barisan mencoba
melemparkan menangkap templat
KONSTAN:
Konstanta mengacu pada nilai yang tidak berubah selama eksekusi program.
Konstanta dapat dibagi menjadi dua kategori utama:
1. Konstanta primer :
a) Konstanta numerik
konstanta bilangan bulat.
Titik-mengambang (nyata)
konstanta. b) Konstanta karakter
Konstanta karakter tunggal Konstanta string
2. Konstanta sekunder :
Konstanta pencacahan.
konstanta simbolik.
Array, serikat pekerja, dll.
Aturan untuk mendeklarasikan konstanta:
1 .Koma dan spasi kosong tidak diizinkan dalam konstanta.
2 .Konstanta dapat didahului dengan tanda minus (-) jika diperlukan.
3 .Nilai konstanta harus berada dalam batas minimum tipe data yang ditentukan.
Konstanta bilangan bulat : Konstanta bilangan bulat adalah bilangan bernilai bilangan bulat. Ini terdiri dari
urutan angka. Konstanta bilangan bulat dapat ditulis dalam tiga sistem bilangan yang berbeda:
1 .Integer desimal (basis 10).
2 .Octal bilangan bulat (basis 8).
3 .Heksadesimal (basis 16).
Konstanta bilangan bulat desimal : Ini terdiri dari kumpulan angka, 0 hingga 9.
Deklarasi yang valid: 0, 124, -56, + 67, 4567 dll.
Deklarasi tidak valid: $245, 2,34, 34 345, 075.
23.345,00. itu juga merupakan deklarasi yang tidak valid.
Catatan: Spasi, koma, karakter, simbol khusus tidak diperbolehkan di antara digit
Bilangan bulat heksadesimal: Terdiri dari kumpulan angka, 0 hingga 9 dan huruf A, B, C, D, E, dan F. Bilangan
bulat heksadesimal adalah urutan angka yang diawali dengan 0x atau 0X. Kita juga dapat menggunakan a sampai
f daripada A ke F.
Contoh: 0X2, 0x9F, 0Xbcd, 0x0, 0x1. (Representasi yang valid)
Mis: Representasi tidak valid: 0af, 0xb3g, 0Xgh.
0af: tidak dimulai dengan 0x atau 0X.
0xb3g, 0Xgh: karakter ilegal seperti g, h. (hanya a sampai f yang diperbolehkan)
Magnitudo (nilai maksimum) konstanta bilangan bulat dapat berkisar dari nol hingga beberapa nilai maksimum
yang bervariasi dari satu komputer ke komputer lainnya.
Nilai maksimum tipikal untuk sebagian besar komputer pribadi adalah: (mesin 16-bit)
Konstanta bilangan bulat desimal: 32767 (215-1)
Konstanta bilangan bulat oktal: 077777
Konstanta bilangan bulat heksadesimal: 0X7FFF
Catatan: Nilai terbesar yang dapat disimpan bergantung pada mesin.
Konstanta floating point atau konstanta Real : Bilangan dengan bagian pecahan disebut konstanta real.
Ini adalah angka dengan basis 10 yang berisi bagian desimal atau eksponen (atau keduanya). Representasi:
Angka-angka ini dapat direpresentasikan dalam notasi desimal atau notasi eksponen (notasi ilmiah).
Notasi desimal: 1234.56, 75.098, 0.0002, -0.00674 (notasi valid)
Eksponen atau notasi ilmiah:
Bentuk umum: Mantissa e eksponen
Mantissa: Ini adalah bilangan real yang dinyatakan dalam notasi desimal atau notasi bilangan bulat.
Eksponen: Ini adalah bilangan bulat dengan tanda plus (+) atau minus (-) opsional.
E atau e : Huruf yang memisahkan mantissa dan bagian desimal.
Contoh: (Notasi yang valid)
3
1,23456 E+ 3 (1,23456×10 )
1
7.5098 e+ 1 (7.5098×10 )
-4
2 E- 4 (2×10 )
Notasi eksponensial ini berguna untuk merepresentasikan angka yang sangat besar atau sangat besar
kecil. Contoh: 0,00000000987 setara dengan 9,87e-9
Konstanta karakter:-
Konstanta karakter tunggal : Ini adalah karakter (atau simbol atau angka apa pun) yang diapit dalam tanda kutip tunggal.
Contoh: „a‟ „1‟ „*‟
Setiap konstanta Karakter memiliki nilai integer yang dikenal sebagai nilai ASCII
ASCII: - ASCII adalah singkatan dari American Standard Code for Information Interchange. Diucapkan ask-ee, ASCII
adalah kode untuk merepresentasikan karakter bahasa Inggris sebagai angka, dengan setiap huruf diberi nomor dari 0 hingga
255. Komputer hanya dapat memahami angka, jadi kode ASCII adalah representasi numerik dari karakter seperti 'a' atau '@'
atau
tindakan semacam itu. Kode SCII mewakili teks di komputer, peralatan komunikasi, dan perangkat lain yang menggunakan
teks. Sebagian besar skema pengkodean karakter modern didasarkan pada ASCII, meskipun mereka mendukung banyak
karakter tambahan. Di bawah ini adalah tabel karakter ASCII dan ini termasuk deskripsi dari 32 karakter non-cetak pertama.
Konstanta string atau literal string:
Konstanta string adalah urutan nol atau lebih karakter yang diapit oleh tanda kutip ganda.
Contoh:
“MRCET” “12345” “*)(&%”
Escape Sequences atau Konstanta Karakter Backslash
Bahasa C mendukung beberapa karakter yang tidak dapat dicetak, serta garis miring terbalik ( \ ) yang dapat
diekspresikan
sebagai escape sequence. Urutan melarikan diri selalu dimulai dengan garis miring terbalik diikuti oleh satu atau
lebih karakter khusus.
Misalnya, karakter baris baru dilambangkan dengan "\n" atau endl
Ini digunakan dalam memformat layar output , yaitu escape sequence digunakan dalam
fungsi keluaran. Beberapa urutan pelarian diberikan di bawah ini:
KELUARAN:
a+b=23
ab=17
a*b=60
a/b=6
a%b=2
2. OPERATOR RELASI : Kita sering membandingkan dua besaran dan bergantung pada hubungannya
mengambil keputusan tertentu untuk perbandingan itu kita menggunakan operator relasional.
operator arti
KELUARAN: 0&&0=0
0&&1=0
1&&0=0
1&&1=1
0||0=0
0||1=1
1||0=1 1||1=1 !0 =1 !1 =0
4 .OPERATOR PENUGASAN:
Ekspresi penugasan mengevaluasi operan di sisi kanan operator (=) dan menempatkan nilainya di variabel
di sebelah kiri.
Catatan: Operan kiri dalam ekspresi penugasan harus berupa variabel tunggal.
Ada dua bentuk penugasan:
• Tugas sederhana
• Tugas majemuk
Tugas sederhana :
Dalam ekspresi aljabar kami menemukan ekspresi ini.
Contoh: a=5; a=a+1; a=b+1;
Di sini, operan sisi kiri harus berupa variabel tetapi bukan konstanta. Variabel sisi kiri harus dapat
menerima nilai ekspresi. Jika operan kiri tidak dapat menerima nilai dan kami menetapkannya, kami
mendapatkan kesalahan kompilasi.
Tugas Majemuk:
Tugas majemuk adalah notasi steno untuk tugas sederhana. Itu mengharuskan operan kiri diulangi sebagai
bagian dari ekspresi kanan. Sintaks: operator variabel+=nilai
Mantan:
A+=1; itu setara dengan A=A+1;
Operator ++ menambahkan satu ke operannya dimana operator - - mengurangi satu dari operannya. Operator ini adalah
operator unary dan mengambil bentuk berikut:
Operator Keterangan
Operator kenaikan dan penurunan dapat mendahului atau
mengikuti operan. -—a Pra-kenaikan
Peningkatan/Penurunan Postfix :( a++/a--) a++ Pasca-kenaikan
Dalam kenaikan postfix (Decrement) nilainya bertambah -A Pra-penurunan
(dikurangi) satu per satu. Jadi a++ memiliki efek yang A- Pasca penurunan
sama dengan
Beberapa operator penugasan steno yang umum digunakan ditunjukkan pada tabel berikut:
Pernyataan dengan operator penugasan Pernyataan dengan operator steno
sederhana
a-
a=a+l =1
a=al a-=l
a=a*l a *=i
a=a/ 1 a-1
a=a% 1 a%=l
a=a*(nl) a*=n+1
5. PENINGKATAN (++) DAN PENURUNAN (--) OPERATOR:
a=a+1; a--memiliki efek yang sama dengan a=a-1.
Perbedaan antara a++ dan a+1 adalah, jika ++ setelah operan, kenaikan dilakukan setelah ekspresi dievaluasi.
Operan dalam ekspresi postfix harus berupa variabel.
Contoh 1:
int a=5;
B=a++; Di sini nilai B adalah 5. nilai a adalah 6.
Contoh2:
int x=4; y=x--; Di sini nilai y adalah 4, nilai x adalah 3
Awalan Penambahan/Penurunan (++a/ --a)
Dalam penambahan awalan (penurunan) efek terjadi sebelum ekspresi yang berisi operator dievaluasi. Ini adalah kebalikan
dari operasi postfix. ++a memiliki efek yang sama dengan a=a+1.
--a memiliki efek yang sama dengan a=a-1.
Contoh: int b=4;
A= ++b;
Dalam hal ini nilai b adalah 5 dan A adalah 5.
Efek dari penambahan postfix dan prefix adalah sama: variabel diinkremen oleh
1. Tapi mereka berperilaku berbeda saat digunakan dalam ekspresi seperti yang ditunjukkan di atas. Eksekusi operator ini
cepat jika dibandingkan dengan pernyataan penugasan yang setara.
#sertakan<iostream.h>
int utama()
{
int a=1;
int b=5;
++a;
cout<<"a="<<a<<endl;
--B;
cout<<"b="<<b<<endl;
cout<<"a="<<a++<<endl;
cout<<"a="<<a<<endl;
cout<<"b="<<b--<<endl;
cout<<"b="<<b<<endl;
kembali 0;
}
a=2
b=4
a=2
a=3
b=4
b=3
6 .OPERATOR KONDISI ATAU OPERATOR TERNARY:
#sertakan<iostream.h>
batal utama()
{
int a,b,c;
cout<<"Masukkan nilai a dan b :";
cin>>a>>b;
c=a>b?a:b;
cout<<"terbesar dari a dan b adalah "<<c;
}
Masukkan nilai a dan b:1
5
7 . OPERATOR BIT WISE : C mendukung operator khusus yang dikenal sebagai operator bitwise untuk
manipulasi data pada level bit. Mereka tidak diterapkan ke float atau double.
operator arti
^ Bitwise eksklusifATAU
<< pergeseran kiri
>> pergeseran kanan
~ pelengkap seseorang
Bitwise DAN operator (&)
Operator bitwise AND adalah operator biner yang membutuhkan dua operan integral (karakter atau integer). Itu melakukan
perbandingan bitwise seperti yang ditunjukkan di bawah ini:
Bit Operan Pertama Bit Operan Kedua Opel & Opel
0 0 0
0 1 0
1 0 0
1 1 1
Penjelasan: Angka yang dimasukkan melalui keyboard sebagai input adalah 8 dan angka binernya adalah 1 000.
...........................................................................................................
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
15 14 13 12 11 10 9 876543 21 0
Setelah eksekusi program, input data x akan digeser 2 bit ke kanan. Jawaban dalam bentuk biner adalah sebagai
berikut:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
15 14 13 12 11 10 9 876543 21 0
Operator shift kanan membagi angka yang diberikan dengan kekuatan 2. Jika kita menggeser bilangan biner dua
tempat ke kanan, kita membagi bilangan tersebut dengan 4 (2').
Ini adalah operator biner yang membutuhkan dua operan integral. Operan pertama adalah nilai yang akan
digeser dan operan kedua menentukan jumlah bit yang akan digeser ke kiri.
Saat bit bergeser ke kiri, bit di ujung paling kiri akan dihapus.
Bitwise NOT, atau komplemen, adalah operasi unary yang melakukan negasi logis pada setiap bit.
membentuk komplemen satuan dari nilai biner yang diberikan. Angka yang tadinya 0 menjadi I, begitu pula
sebaliknya.
Mantan: BUKAN 0111 (desimal 7) = 1000 (desimal 8)
Dalam C, operator NOT bitwise adalah (tilde). Meja kebenaran:
Nilai ekspresi ~ Ekspresi
0 1
1 (bukan nol) 0
Catatan: Operator pelengkap (Bitwise NOT) berbeda dengan operator Logical NOT. Kami menggunakan
operator ini dalam proses encoding dan decoding.
8.5 OPERATOR KHUSUS
Operator ini yang tidak sesuai dengan klasifikasi di atas adalah ,(comma), sizeof, operator Pointer(& dan *) dan
operator pemilihan anggota (. dan ->). Operator koma digunakan untuk menautkan ekspresi terkait bersama-sama.
Operator SIZEOF:
Ini mengembalikan jumlah byte yang ditempati oleh operan. Operan dapat berupa variabel, konstanta (nilai
data) atau kualifikasi tipe data.
Contoh: int a. c, f, d;
c=ukurandari(a); di sini c=2, operator sizeof mengembalikan ukuran variabel a yang bertipe int f=sizeof(long
double); nilai f adalah 10 yang merupakan ukuran dari kualifikasi ganda tipe d=sizeof(23.345); nilai d adalah
4 yang merupakan ukuran nilai konstanta float
Operator sizeof biasanya digunakan untuk menentukan panjang array dan struktur. Ini juga digunakan untuk
mengalokasikan ruang secara dinamis ke variabel s selama eksekusi program.
Operator koma dapat digunakan untuk menautkan ekspresi ekspresi terkait yang dievaluasi dari kiri ke kanan
dan nilai dari ekspresi gabungan.
Contoh: a=(x=10, y=20, x+y);
Operator di c++: Semua operator bahasa c di atas juga berlaku di c++. Operator baru yang diperkenalkan di c++
adalah
Manipulator:
Manipulator adalah operator yang digunakan untuk memformat data yang akan ditampilkan di layar.
Manipulator yang paling umum digunakan adalah endl dan setw
endl:-itu digunakan dalam pernyataan keluaran dan menyisipkan umpan baris. Mirip dengan karakter baris
baru (“\n”)
contoh: cout<<”a=2”<<endl;
cout<”nama=matahari”<<endl;
Keluaran:
a=2
nama=matahari
setw:-
manipulator ini memungkinkan lebar tertentu untuk bidang yang akan dicetak di layar
dan secara default nilai yang tercetak benar. Fungsi ini tersedia di file header iomanip.h
#sertakan<iostream.h>
#termasuk<iomanip.h>
menggunakan namespace std;
int utama()
{
int s=123;
cout<<"s="<<setw(10)<<s ;
}
keluaran
s= 123
Operator penyisipan (<<) dan Ekstraksi (>>):
operator digunakan dengan objek keluaran dan masukan
mantan:
cout<<”Masukkan n”;
cin>>n
Pernyataan kontrol: - Alur eksekusi pernyataan dalam suatu program disebut sebagai kontrol. Pernyataan
kontrol adalah pernyataan yang mengontrol aliran eksekusi program. Pernyataan kontrol diklasifikasikan ke
dalam kategori berikut.
1.Pernyataan kontrol berurutan
2. Pernyataan kontrol bersyarat
(jenis) ekspresi;
3. Pernyataan kontrol tanpa syarat Atau
1.Berurutan kontrol pernyataan:- jenis (ekspresi);
pernyataan memastikan itu itu Instruksi kontrol berurutan (atau
pernyataan) dieksekusi dengan cara yang urutan di mana
mereka muncul dalam program. yaitu Oleh bawaan sistem
mengeksekusi pernyataan dalam urutan di dalamsekuensial
program.
2.Pernyataan kontrol bersyarat: Pernyataan yang dijalankan ketika suatu kondisi benar. Pernyataan-
pernyataan ini dibagi menjadi tiga kategori. mereka
1. Pernyataan pengambilan keputusan
2.Switch case control statement atau
3.Pernyataan kontrol loop atau pengulangan
1 .Pernyataan pengambilan keputusan: - Pernyataan ini digunakan untuk mengontrol aliran eksekusi suatu
program dengan membuat keputusan tergantung pada suatu kondisi, oleh karena itu disebut sebagai pernyataan
pengambilan keputusan.
Pernyataan pengambilan keputusan terdiri dari empat jenis
1. Sederhana jika
2.jika lain
3. bersarang jika lain
4.1 f tangga lainnya
1.51 mple if pernyataan: jika ekspresi tes benar maka jika pernyataan mengeksekusi pernyataan yang segera
mengikuti if
Sintaksis:
Jika (uji ekspresi)
Daftar pernyataan;
#sertakan<iostream.h>
int utama()
{
int a,b;
cout<<"Masukkan sembarang dua bilangan bulat:";
cin>>a>>b;
if(a>b) cout<<“A lebih besar dari B\n A="<<a;
3 .Penyatuan pernyataan if-else JUGA MEMUNGKINKAN untuk menyarangkan satu pernyataan if di dalam pernyataan
lainnya. KETIKA serangkaian keputusan harus dibuat.
Pernyataan if –else ditempatkan di dalam pernyataan if else lainnya Sintaks:
If(uji ekspresi) { If(uji ekspresi) {
//pernyataan } else { //pernyataan } }
else
{ If(uji ekspresi) { //pernyataan } else {
//pernyataan }
} /*terbesar dari tiga angka*/
#sertakan<iostream.h>
#include<conio.h> int main() { int a,b,c;
cout<<"Masukkan nilai a,b,c :";
cin>>a>>b>>c;
jika(a>b) {
jika(a>c) {
cout<<"A ia
terbesar
diantara tiga
bilangan\n";
cout"A= "<<a;
} kalau tidak {
cout<<"C ia
terbesar
diantara tiga
bilangan\n"; cout<<"c= "<<c;
} } else { jika(b>c) {
cout<<"B ia terbesar diantara tiga bilangan\n"; cout<<"B="<<b;
}
kalau tidak
{
cout<<"C ia terbesar diantara tiga bilangan\n";
cout<<"c="<<c;
}
}
getch();
kembali 0;
}
4.1 f tangga lainnya
jika(kondisi1)
pernyataan1;
lain jika (kondisi2)
pernyataan 2;
lain jika (kondisi3)
pernyataan n;
kalau tidak
pernyataan bawaan.
pernyataan-x;
Kondisi dievaluasi dari atas ke bawah. Jika suatu kondisi benar, pernyataan yang terkait dengannya dijalankan.
Ketika semua kondisi menjadi salah maka final bagian lain yang berisi pernyataan default akan dieksekusi.
#sertakan<iostream.h>
batal utama()
{
int per;
cout<<”Masuk
persentase"; cin>>per;
jika(per>=80)
cout<<"Aman
Perbedaan”<<endl; else if(per>=60)
cout<<”Aman Pertama
Pembagian”<<endl; lain jika(per>=50)
cout<<"Aman
Divisi Kedua”<<endl;
lain jika(per>=40)
cout<<"Aman
Pembagian”<<endl; Ketig
kalau tidak a
cout<<”Gagal”<<endl
bawaan:
blok bawaan;
1 .SEMENTARA PERNYATAAN :
Mengerjakan
{
tubuh
}sementara(kondisi pengujian);
Mengerjakan{
jumlah = jumlah + saya;
saya = saya + 1;
} while(i<=n);
cout<<"Jumlah bilangan asli"<< n<<"bilangan asli
adalah:”<<jumlah; kembali 0;
}
Catatan: jika kondisi pengujian salah. sebelum loop dieksekusi maka while loop mengeksekusi nol kali dimana do--while
mengeksekusi satu kali
3.UNTUK LOOP: Ini juga merupakan loop kontrol entri yang menyediakan struktur yang
lebih ringkas
Sintaksis:
for(inisialisasi; ekspresi uji; kenaikan/penurunan) {
pernyataan;
}
Pernyataan for dibagi menjadi tiga ekspresi yang masing-
masing dipisahkan oleh titik koma;
1. ekspresi initilisasi digunakan untuk menginisialisasi
variabel
2.test expression bertanggung jawab untuk melanjutkan loop.
Jika itu benar, maka aliran kontrol program masuk ke dalam
loop dan mengeksekusi blok pernyataan yang terkait
dengannya. Jika ekspresi tes adalah false loop berakhir
3.increment/decrement expression terdiri dari operator
kenaikan atau penurunan Proses ini berlanjut sampai kondisi
tes memenuhi .
untuk(i=1;i<=n;i++)
{
jumlah = jumlah + saya;
}
Loop bersarang: Menulis satu pernyataan kontrol loop dalam pernyataan kontrol loop lain disebut
pernyataan loop bersarang
Mantan:
untuk(i=1;i<=10;i++)
untuk(j=1;j<=10;j++) cout<<i<<j;
cout<<i<<”\t”;
}
getch();
}
Keluaran:
Masukkan nomor: 5
2 35
label:
penyataan pergi ke
; label;
Lompat Maju Lompat Mundur
Label: dapat berada di mana saja dalam program baik sebelum atau sesudah label goto; penyataan.
Jika label: diletakkan setelah goto label;, beberapa pernyataan akan dilewati dan lompatan dikenal sebagai
Lompatan Maju.
Jika label: ditempatkan sebelum label kebagian; sebuah loop akan terbentuk beberapa pernyataan akan
dieksekusi berulang kali. Lompatan seperti itu dikenal sebagai Backward Jump.
Lanjutkan: Ini digunakan untuk melanjutkan iterasi pernyataan loop dengan melewatkan
pernyataan setelah pernyataan lanjutan. Ini menyebabkan kontrol langsung ke kondisi
pengujian dan kemudian melanjutkan perulangan.
/*program c untuk mencari jumlah n bilangan positif yang dibaca dari keyboard*/
#termasuk<stdio.h>
int utama()
{
int i ,jumlah = 0,n,bilangan;
cout<<Masukkan N";
cin>>n;
untuk(i=1;i<=n;i++)
{
cout<<"Masukkan Angka :";
cin>>angka;
if(angka<0) lanjutkan;
jumlah = jumlah + angka;
}
cout<<“Jumlah”<<n<<” adalah :”<<jumlah;
kembali 0;
}
SATUAN -2
Pengenalan Kelas:
Pendekatan pemrograman berorientasi objek adalah kumpulan objek dan setiap objek terdiri dari
struktur dan prosedur data yang sesuai. Program ini dapat digunakan kembali dan lebih dapat dipelihara.
Aspek penting dalam oop adalah kelas yang memiliki sintaks yang mirip dengan struktur.
class : Ini adalah kumpulan data dan fungsi anggota yang memanipulasi data. Komponen data kelas disebut
anggota data dan fungsi yang memanipulasi data disebut fungsi anggota.
Itu juga bisa disebut sebagai cetak biru atau prototipe yang mendefinisikan variabel dan fungsi yang
umum untuk semua objek dari jenis tertentu. Ia juga dikenal sebagai tipe data yang ditentukan pengguna atau
ADT (tipe data abstrak) Sebuah kelas dideklarasikan dengan kata kunci class .
Sintaksis:-
kelas nama_kelas {
Penentu akses :
Deklarasi variabel;
Penentu akses :
deklarasi fungsi;
};
Kontrol akses:
Penentu akses atau pengubah akses adalah label yang menentukan jenis akses yang diberikan kepada
anggota kelas. Ini digunakan untuk menyembunyikan data. Ini juga disebut sebagai mode visibilitas. Ada tiga
jenis penentu akses
1. pribadi
2.publik
3. dilindungi
1.Pribadi:
Jika anggota data dideklarasikan sebagai akses pribadi maka mereka tidak dapat diakses dari fungsi lain
di luar kelas. Itu hanya dapat diakses oleh fungsi yang dideklarasikan di dalam kelas. Dideklarasikan dengan
kata kunci „ privat ‟.
2.publik:
Jika anggota data dideklarasikan akses publik maka mereka dapat diakses dari fungsi lain di luar kelas.
Dinyatakan dengan kata kunci „ publik ‟.
3.dilindungi: Tingkat akses dari deklarasi yang dilindungi berada di antara publik dan pribadi. Penentu akses
ini digunakan pada saat pewarisan
Catatan:-
Jika tidak ada penentu akses yang ditentukan maka secara default diperlakukan sebagai pribadi
Penentu akses default struktur adalah publik sedangkan kelas adalah "pribadi"
Contoh:
siswa kelas
{
pribadi : int roll;
nama karakter[30];
publik:
batal get_data()
{
cout<<”Masukkan nomor dan nama roll”: cin>>roll>>nama;
}
batal put_data()
{
cout<<"Nomor rol:"<<roll<<endl;
cout<<”Nama :”<<nama<<endl;
}
};
Objek: -Instance kelas disebut objek.
Sintaksis:
nama_kelas nama_objek;
Mantan:
siswa;
Mengakses anggota :-dot operator digunakan untuk mengakses anggota kelas
Nama-objek.nama-fungsi(argumen aktual);
Mantan:
s.get_data();
s.put_data();
Catatan:
1 .Jika penentu akses tidak ditentukan di kelas, penentu akses default adalah pribadi
2 .Semua fungsi anggota harus dideklarasikan sebagai publik jika tidak dapat diakses di luar kelas.
Obyek:
Contoh kelas disebut sebagai objek.
Sintaksis:
Class_name nama objek;
Contoh:
siswa;
dalam contoh di atas s adalah objek. Ini adalah entitas waktu nyata yang dapat digunakan
Buatlah program untuk membaca data siswa
#termasuk<iostream>
menggunakan namespace std;
siswa kelas
{
pribadi:
int gulungan;
nama karakter[20];
publik:
batal getdata()
{cout<<”Masukkan nomor Rol:”;
cin>>gulung;
cout<<”Masukkan Nama :”;
cin>>nama;
}
batal putdata()
{cout<<"Nomor gulungan:"<<roll<<endl;
cout<<Nama:”<<nama<<endl;
}
};
int utama()
{
siswa;
s.getdata();
s.putdata();
kembali 0;
}
Operator Resolusi Lingkup:
Lingkup: - Visibilitas atau ketersediaan variabel dalam suatu program disebut sebagai ruang
lingkup. Ada dua jenis ruang lingkup. i) Lingkup lokal ii) Lingkup global
Cakupan lokal: visibilitas variabel lokal ke fungsi yang dideklarasikan.
Lingkup global: visibilitas variabel ke semua fungsi program
Operator resolusi lingkup di “::” .
Ini digunakan untuk mengakses variabel global jika variabel yang sama dideklarasikan sebagai
lokal dan global
#sertakan<iostream.h>
int a=5;
batal utama()
{
int a=1;
cout<<"Lokal a="<<a<<endl;
cout<<"Global a="<<::a<<endl;
}
Cakupan Kelas:
Operator resolusi lingkup (::) digunakan untuk mendefinisikan fungsi di luar kelas.
#termasuk <iostream>
menggunakan namespace std;
sampel kelas
{
publik:
keluaran batal(); // deklarasi fungsi
};
// definisi fungsi di luar
kelas batal sampel::output() {
cout << "Fungsi didefinisikan di luar kelas.\n";
};
int utama() {
contoh objek;
obj.output();
kembali 0;
}
Keluaran program:
Fungsi didefinisikan di luar kelas.
FUNGSI INLINE:
Definisi:
Fungsi inline adalah fungsi yang diperluas sejalan ketika dipanggil. Ekspansi sebaris membuat program
berjalan lebih cepat karena overhead pemanggilan dan pengembalian fungsi dihilangkan. Ini
didefinisikan dengan menggunakan kata kunci "inline"
Sintaksis:
Tipe data class name::static_variable Name;
Contoh: int item::hitung;
#sertakan<iostream.h>
#sertakan<conio.h>
barang kelas
{
jumlah int statis;
int nomor;
publik:
batal getdata(int a) {
nomor=a; hitung++;
}
batalkan getcount()
{
cout<<"jumlah adalah"<<jumlah;
}
};
int item::menghitung;//decleration
int utama()
{
butir a,b,c;
a.getcount();
b.getcount();
c.getcount();
a.getdata(100);
b.getdata(200);
c.getdata(300);
cout<<"Setelah membaca data";
a.getcount();
b.getcount();
c.getcount();
kembali 0;
}
Keluaran:
hitungan adalah 0
hitungan adalah 0
hitungan adalah 0
Setelah membaca data
hitungannya 3
hitungannya 3
hitungannya 3
Fungsi Anggota Statis
Seperti variabel anggota statis, kita juga dapat memiliki fungsi anggota statis. Fungsi anggota yang
dinyatakan statis memiliki properti berikut:
Fungsi statis hanya dapat memiliki akses ke anggota statis lainnya (fungsi atau variabel) yang
dideklarasikan di kelas yang sama.
Fungsi anggota statis harus dipanggil menggunakan nama kelas (bukan objeknya) sebagai berikut:
nama-kelas :: nama-fungsi;
#sertakan<iostream.h>
tes kelas
{
kode int;
jumlah int statis;
publik:
membatalkan setcode()
{
kode=++jumlah;
}
membatalkan showcode()
{
cout<<”nomor objek”<<kode;
}
showcount kekosongan statis ()
{
cout<<”menghitung”<<menghitung;
}
};
int tes::menghitung;
int utama()
{
uji t1,t2;
t1.setcode();
t2.setcode();
test::showcount();
uji t3;
t3.setcode();
test::showcount();
t1.showcode();
t2.showcode();
t3.showcode();
kembali 0;
}
Keluaran:
hitungan 2
hitungan 3
objek nomor 1
objek nomor 2
objek nomor 3
Array Objek : Array variabel tipe "kelas" dikenal sebagai "Array objek". Larik objek disimpan di dalam
memori dengan cara yang sama seperti pada larik biasa.
Sintaksis:
kelas_nama_kelas
{
pribadi:
anggota data_type;
publik:
anggota data_type; fungsi anggota;
};
Susunan objek:
Nama_kelas nama_objek[ukuran];
Di mana ukuran adalah ukuran array
Mantan:
Obj kelasku[10];
Tulis program untuk menginisialisasi array objek dan mencetaknya
#termasuk<iostream>
menggunakan namespace std;
kelas MyClass
{
int a;
publik:
himpunan kosong(int x)
{
a=x;
}
int dapatkan()
{
kembalikan;
}
};
int utama()
{
Obj Kelasku[5];
untuk(int i=0;i<5;i++)
obj[i].set(i);
untuk(int i=0;i<5;i++)
cout<<"obj["<<i<<"].get():"<<obj[i].get()<<endl;
}
Keluaran:
obj[0].dapatkan():0
obj[1].dapatkan():1
obj[2].dapatkan():2
obj[3].dapatkan():3
obj[4].dapatkan():4
Objek sebagai Argumen Fungsi: Objek dapat digunakan sebagai argumen untuk
fungsi Ini dapat dilakukan dengan tiga cara
a. Pass-by-value atau call by value
b. Lewati alamat atau hubungi melalui alamat
c. Pass-by-reference atau panggilan dengan referensi
a.Pass-by-value – Salinan objek (objek aktual) dikirim ke fungsi dan ditugaskan ke objek yang disebut fungsi
(objek formal). Salinan objek aktual dan formal disimpan di lokasi memori yang berbeda. Oleh karena itu,
perubahan yang dilakukan pada objek formal tidak tercermin pada objek yang sebenarnya. tulis program untuk
menukar nilai dua objek
tulis program untuk menukar nilai dua objek
#sertakan<iostream.h>
menggunakan namespace std;
sampel kelas2;
sampel kelas1
{
int a;
publik:
batal getdata(int x);
tampilan batal teman (sample1 x, sample2 y);
pertukaran batal teman (sample1 x, sample2 y);
};
batal sample1::getdata(int x)
{
a=x;
}
sampel kelas2
{
int b;
publik:
batal getdata(int x);
tampilan batal teman (sample1 x, sample2 y);
};
batal sample1::getdata(int x)
{
a=x;
}
sampel kelas2
{
int b;
publik:
batal getdata(int x);
tampilan batal teman (sample1 x, sample2 y);
pertukaran batal teman (sample1 *x, sample2 *y);
};
batal sample2::getdata(int x)
{
b=x;
}
tampilan batal (sample1 x, sample2 y)
{
cout<<"Data pada objek 1 adalah "<<endl;
cout<<"a="<<xa<<endl;
cout<<"Data pada objek 2 adalah"<<endl;
cout<<"b="<<yb<<endl;
}
batal menukar (sample1 *x,sample2 *y)
{
int t;
t=x->a;
x->a=y->b;
y->b=t;
}
int utama()
{
sampel1 objek1;
sample2 obj2;
obj1.getdata(5);
obj2.getdata(15);
cout<<"Sebelum Menukar Data Antara Dua Objek\n ";
tampilkan(obj1,obj2);
tukar(&obj1,&obj2);
cout<<"Setelah Tukar Data Antara Dua Objek\n ";
tampilkan(obj1,obj2);
}
Sebelum Menukar data antara Dua objek
Data pada objek 1 adalah a=5
Data pada objek 2 adalah b=15
setelah Tukar data antara Dua objek
Data pada objek 1 adalah a=15
Data pada objek 2 adalah b=5 c.Pass-by-reference : Referensi objek dikirim sebagai argumen ke fungsi.
Referensi ke variabel memberikan nama alternatif untuk variabel yang ditentukan sebelumnya. Jika ada
perubahan yang dilakukan pada variabel referensi maka ada perubahan pada variabel asli.
Variabel referensi dapat dideklarasikan sebagai berikut
int x=5;
int &y=x;
Mantan:
Tulis program untuk mencari jumlah n bilangan asli dengan menggunakan variabel referensi
#include<iostream.h>
menggunakan namespace std;
int utama()
{
int i=0;
int &j=i;
int s=0;
int n;
cout<<"Masukkan n:";
cin>>n;
sementara(j<=n)
{
s=s+i;
saya++;
}
cout<<"sum="<<s<<endl;
}
Keluaran:
Masukkan n:10
jumlah=55
tulis program untuk menukar nilai dua objek
#sertakan<iostream.h>
menggunakan namespace std;
sampel kelas2;
sampel kelas1
{
int a;
publik:
batal getdata(int x);
tampilan batal teman (sample1 x, sample2 y);
pertukaran teman batal (sample1 &x, sample2 &y);
};
batal sample1::getdata(int x)
{
a=x;
}
sampel kelas2
{
int b;
publik:
batal getdata(int x);
tampilan batal teman (sample1 x, sample2 y);
pertukaran teman batal (sample1 &x, sample2 &y);
};
batal sample2::getdata(int x)
{
b=x;
}
tampilan batal (sample1 x, sample2 y)
{
cout<<"Data pada objek 1 adalah "<<endl;
cout<<"a="<<xa<<endl;
cout<<"Data pada objek 2 adalah"<<endl;
cout<<"b="<<yb<<endl;
}
batal menukar (sample1 &x, sample2 &y)
{
int t;
t=xa;
xa=yb;
yb=t;
}
int utama()
{
sampel1 objek1;
sample2 obj2;
obj1.getdata(5);
obj2.getdata(15);
cout<<"Sebelum Menukar Data Antara Dua Objek\n ";
tampilkan(obj1,obj2);
tukar(obj1,obj2);
cout<<"Setelah Tukar Data Antara Dua Objek\n ";
tampilkan(obj1,obj2);
}
Keluaran:
Sebelum Menukar data antara Dua objek
Data pada objek 1 adalah a=5
Data pada objek 2 adalah b=15
setelah Tukar data antara Dua objek
Data pada objek 1 adalah a=15
Data pada objek 2 adalah b=5
FUNGSI TEMAN: Anggota pribadi tidak dapat diakses dari luar kelas. yaitu ... fungsi non anggota tidak
dapat memiliki akses ke data pribadi kelas. Dalam C++, fungsi non-anggota dapat mengakses privat dengan
membuat fungsi ramah ke kelas.
Definisi:
Fungsi teman adalah fungsi yang dideklarasikan di dalam kelas dan didefinisikan di luar kelas. Itu tidak
memerlukan operator resolusi ruang lingkup untuk mendefinisikan . Itu dapat mengakses anggota pribadi dari
suatu kelas. Itu dideklarasikan dengan menggunakan kata kunci "teman"
Mantan:
sampel kelas
{ int x,y; publik: sampel(int a,int b);
teman int jumlah(sampel s);
};
sampel::sampel(int a,int b)
{ x=a;y=b;
}
int jumlah(sampel s)
{ int jumlah;
jumlah=s.x+sy;
kembali 0;
}
batal utama()
{
Contoh obj(2,3);
int res=jumlah(obj);
cout<<"jumlah="<<res<<endl;
}
Fungsi teman memiliki karakteristik khusus tertentu:
Itu tidak dalam ruang lingkup kelas yang telah dinyatakan sebagai teman.
Karena tidak dalam ruang lingkup kelas, itu tidak dapat dipanggil menggunakan objek dari kelas itu. Itu dapat dipanggil seperti
fungsi normal tanpa bantuan objek apa pun.
Tidak seperti fungsi anggota, ia tidak dapat mengakses nama anggota secara langsung dan harus menggunakan nama objek dan
operator keanggotaan dot dengan setiap nama anggota.
Itu dapat dideklarasikan baik di bagian publik atau pribadi dari suatu kelas tanpa mempengaruhi maknanya.
Biasanya, ia memiliki objek sebagai argumen.
#include<iostream.h> contoh kelas
{
int a;
int b;
publik:
membatalkan nilai yang ditetapkan()
{
a=25;
b=40;
}
mean float teman (sampel s);
};
rata-rata float (sampel s)
{
return float(s.a+sb)/2.0;
}
int utama()
{
sampel X;
X.setnilai();
cout<<"Nilai Rata-Rata="<<mean(X);
kembali 0;
}
tulis program untuk menemukan maksimal dua angka menggunakan fungsi teman untuk dua kelas
berbeda #include<iostream>
menggunakan namespace std;
sampel kelas2;
sampel kelas1
{
int x;
publik:
sampel1(int a);
teman void max(sample1 s1, sample2 s2)
};
sampel1::sampel1(int a)
{
x=a;
}
sampel kelas2
{
int y;
publik:
sampel2(int b);
teman void max(sample1 s1, sample2 s2)
};
Sampel2::sampel2(int b)
{
y=b;
}
batal max(sample1 s1,sample2 s2)
{
Jika(s1.x>s2.y)
cout<<”Data member pada objek kelas sample1 lebih besar ”<<endl;
kalau tidak
cout<<”Data member di objek kelas sample2 lebih besar ”<<endl;
}
batal utama()
{
sample1 obj1(3);
sample2 obj2(5);
maks(obj1,obj2);
}
#termasuk<iostream>
menggunakan namespace std;
kompleks kelas
{
float nyata,img;
publik:
kompleks();
kompleks(float x,float y)
kompleks teman add_complex(kompleks c1,kompleks c2);
};
kompleks::kompleks()
{
nyata=img=0;
}
kompleks::kompleks(float x,float y)
{
real=x;img=y;
}
kompleks add_complex(kompleks c1,kompleks c2)
{
t kompleks;
t.nyata=c1.nyata+c2.nyata;
t.img=c1.img+c2.img;
kembali t;
}
batal kompleks::tampilan ()
{
jika(img<0)
{img=-img;
cout<<nyata<<"-i"<<img<<endl
} else { cout<<nyata<<"+i"<<img<<endl
}
}
int utama()
{
kompleks obj1(2,3);
kompleks obj2(-4,-6);
kompleks obj3=add_compex(obj1,obj2);
obj3.tampilan();
kembali 0;
}
Kelas Teman: Kelas juga dapat dideklarasikan sebagai teman dari beberapa kelas lain. Ketika kita membuat
class teman maka semua fungsi anggota dari class teman juga menjadi teman dari kelas lain. Ini membutuhkan
syarat bahwa teman yang menjadi kelas harus dideklarasikan atau didefinisikan terlebih dahulu (deklarasi
maju).
#termasuk <iostream.h>
sampel kelas_1
{
sample_2 kelas teman;//mendeklarasikan kelas teman
int a,b;
publik:
batal getdata_1()
{
cout<<"Masukkan nilai A & B pada kelas sample_1";
cin>>a>>b;
}
batal display_1()
{
cout<<"A="<<a<<endl;
cout<<"B="<<b<<endl;
}
};
sampel kelas_2
{
int c,d,jumlah;
sample_1 obj1;
publik:
batal getdata_2()
{
obj1.getdata_1();
cout<<"Masukkan nilai C & D di kelas sample_2"; cin>>c>>d;
}
batal jumlah_2()
{
jumlah=obj1.a+obj1.b+c+d;
}
batal display_2()
{
cout<<"A="<<obj1.a<<endl;
cout<<"B="<<obj1.b<<endl;
cout<<"C="<<c<<endl;
cout<<"D="<<d<<endl;
cout<<"SUM="<<jumlah<<endl;
}
};
int utama()
{
sample_1 s1;
s1.getdata_1();
s1.tampilan_1();
sample_2 s2;
s2.getdata_2();
s2.sum_2();
s2.tampilan_2();
}
bilangan bulat obj1; => tidak hanya membuat objek obj1 tetapi juga menginisialisasi anggota datanya m dan n
ke nol. Tidak perlu menulis pernyataan apa pun untuk menjalankan fungsi konstruktor.
KARAKTERISTIK KONSTRUKTOR
> Mereka harus diumumkan di bagian publik.
Mereka dipanggil secara otomatis saat objek dibuat.
> Mereka tidak memiliki tipe pengembalian, bahkan tidak batal.
Mereka tidak dapat diwariskan, meskipun kelas turunan dapat memanggil
konstruktor kelas dasar.
> Seperti fungsi c++ lainnya, mereka dapat memiliki argumen default.
>
Mereka membuat 'panggilan implisit' ke operator baru dan menghapus ketika alokasi memori
diperlukan.
Konstruktor terdiri dari 3 jenis:
1. Konstruktor Default
2. Konstruktor berparameter
3. Salin Pembuat
1 .Default Constructor: Sebuah constructor yang tidak menerima parameter disebut default constructor .
#sertakan<iostream.h>
#sertakan<conio.h> item kelas
{
int m,n;
publik:
barang()
{
m=10;
n=20;
}
batal masukkan();
};
barang batal::taruh() {
cout<<m<<n;
}
batal utama()
{
barang t;
t.put();
getch();
}
2 .Konstruktor Berparameter: - Konstruktor yang mengambil parameter disebut
konstruktor berparameter.
#sertakan<iostream.h>
barang kelas
{
int m,n;
publik:
item(int x, int y)
{
m=x;
n=y;
}
};
Ketika konstruktor telah diparameterisasi, pernyataan deklarasi objek seperti item t; mungkin
tidak bekerja. Kita harus meneruskan nilai awal sebagai argumen ke fungsi konstruktor saat objek
dideklarasikan. Ini dapat dilakukan dengan 2 cara: item t=item(10,20); // panggilan eksplisit
batal masukkan();
};
item batal::taruh()
{
cout<<m<<n;
}
batal utama()
{
butir t1(10,20);
angka t2=angka(20,30);
t1.put();
t2.put();
getch();
}
3 .Copy Constructor: Copy constructor digunakan untuk mendeklarasikan dan
menginisialisasi objek dari objek lain.
Misalnya:
butir t2(t1);
atau
barang t2=t1;
Beberapa Konstruktor dalam Kelas: Beberapa konstruktor dapat dideklarasikan dalam sebuah kelas.
Bisa ada sejumlah konstruktor di kelas.
kompleks kelas
{
float nyata,img;
publik:
kompleks()// konstruktor default
{
nyata=img=0;
}
nyata=img=r;
}
real=r;img=i;
}
kompleks(kompleks&c)//salin konstruktor
{
real=c.nyata;
img=c.img;
}
jumlah kompleks(kompleks c ) {
t kompleks;
t.nyata=nyata+c.nyata;
t.img=img+c.img;
kembali t;
}
batal tampilkan()
{
Jika(img>0)
cout<<nyata<<"+i"<<img<<endl;
kalau tidak
{
img=-img;
cout<<nyata<<"-i"<<img<<endl;
}
};
batal utama()
{
kompleks c1(1,2);
kompleks c2(2,2);
kompleks c3;
c3=c1.sum(c3);
c3.show();
DESTRUCTORS: Destruktor, digunakan untuk menghancurkan objek yang telah dibuat oleh konstruktor.
Seperti konstruktor, destruktor adalah fungsi anggota yang namanya sama dengan nama kelas tetapi
didahului oleh tilde.
Misalnya: ~item() { }
1. Destruktor tidak pernah mengambil argumen apa pun juga tidak mengembalikan nilai apa pun.
2. Itu akan dipanggil secara implisit oleh kompiler saat keluar dari program untuk membersihkan
penyimpanan yang tidak lagi dapat diakses.
3. Ini adalah praktik yang baik untuk mendeklarasikan destruktor dalam suatu program karena melepaskan
ruang memori untuk penggunaan di masa mendatang.
#termasuk<iostream>
menggunakan namespace std;
Tanda kelas
{
publik:
int matematika;
int sains;
// konstruktor
Tanda() {
cout<<"Di dalam Konstruktor"<<endl;
cout << "Objek C++ telah dibuat"<<endl;
}
//Destruktor
~Tanda() {
cout<<"Di dalam Destructor"<<endl;
cout << "Objek C++ dihancurkan"<<endl;
}
};
int utama()
{
Menandai m1;
Menandai m2;
kembali 0;
}
Keluaran:
Di dalam Konstruktor
Objek C++ dibuat
Di dalam Konstruktor
Objek C++ dibuat
Di dalam Penghancur
Objek C++ dihancurkan
Di dalam Penghancur
Objek C++ dihancurkan
WARISAN: . Mekanisme menurunkan kelas baru dari yang lama disebut pewarisan atau derivasi . Kelas
lama disebut sebagai kelas dasar dan yang baru disebut kelas turunan atau sub kelas . Kelas turunan mewarisi
beberapa atau semua sifat dari kelas dasar.
Kelas juga dapat mewarisi properti dari lebih dari satu kelas atau dari lebih dari satu level. Dapat
digunakan kembali adalah fitur penting dari OOP
Kelas turunan dapat didefinisikan dengan menentukan hubungannya dengan kelas dasar selain detailnya sendiri.
Titik dua menunjukkan bahwa nama kelas turunan berasal dari nama kelas dasar. mode visibilitas bersifat
opsional dan jika ada, dapat berupa pribadi atau dilindungi atau publik. Standarnya adalah pribadi. Mode
visibilitas menentukan apakah fitur dari kelas dasar diturunkan secara pribadi atau diturunkan secara publik.
Jenis Warisan: 1. Warisan Tunggal 2. Warisan Bertingkat 3. Warisan Berganda 4. Warisan Hibrida 5. Warisan
Hirarkis.
1.WARISAN TUNGGAL: satu kelas turunan mewarisi hanya dari satu kelas dasar. Ini adalah bentuk Warisan
yang paling sederhana.
Kelas A / / Basis
B // kelas turunan
#include<iostream> menggunakan namespace std; kelas A { publik: int a,b; void get() { cout<<"Masukkan
sembarang dua nilai bilangan bulat"<<endl; cin>>a>>b;
} };
kelas B: publik A {
int c;
publik:
batal tambahkan()
{ c=a+b;
cout<<a<<"+"<<b<<"="<<c;
}
};
int utama()
{
B b;
b.dapatkan();
b.tambahkan();
}
Keluaran:
Masukkan dua nilai bilangan bulat
12
1+2=3
2.WARISAN MULTILEVEL: Dalam jenis pewarisan ini, kelas turunan mewarisi dari suatu kelas, yang pada
gilirannya mewarisi dari beberapa kelas lain. Kelas Super untuk satu, adalah sub kelas untuk yang lain.
#sertakan<iostream.h>
kelas A
{
publik:
int a,b;
batal dapatkan()
{
cout<<"Masukkan dua nilai bilangan bulat"<<endl;
cin>>a>>b;
}
};
kelas B: publik A
{
publik:
int c;
batal tambahkan()
{
c=a+b;
}
};
kelas C: publik B
{
publik:
batal tampilkan()
{
cout<<a<<"+"<<b<<"="<<c;
}
};
int utama()
{
Cc;
c.dapatkan();
c.tambahkan();
c.show();
}
Keluaran:
Masukkan dua nilai bilangan bulat
12 14
12+14=26
3 .Multiple Inheritance: Dalam jenis pewarisan ini, satu kelas turunan dapat mewarisi dari dua atau lebih
dari dua kelas dasar.
Sintaksi
s: kelas D : jarak pandang A, jarak pandang B,…. {
#sertakan<iostream.h>
kelas A
{
publik:
int a;
batal getA()
{
cout<<"Masukkan Nilai Integer"<<endl; cin>>a;
}
};
kelas B
{
publik:
int b;
batal getB()
{
cout<<"Masukkan Nilai Integer"<<endl; cin>>b;
}
};
4 .Hybrid Inheritance : Pewarisan hibrid adalah kombinasi dari dua atau lebih pewarisan seperti
pewarisan tunggal, ganda, bertingkat atau hirarkis.
#sertakan<iostream.h>
aritmatika kelas
{
terlindung:
int angka1, angka2;
publik:
batal getdata()
{
cout<<"Untuk Penambahan :";
cout<<"\nMasukkan bilangan pertama : ";
cin>>angka1;
cout<<"\nMasukkan bilangan kedua : ";
cin>>bil2;
}
};
kelas plus: aritmatika publik
{
terlindung:
int jumlah;
publik:
batal tambahkan()
{
jumlah=bil1+bil2;
}
};
minus kelas
{
terlindung:
int n1,n2,beda;
publik:
batal sub()
{
cout<<"\nUntuk Pengurangan :";
cout<<"\nMasukkan bilangan pertama : ";
cin>>n1;
cout<<"\nMasukkan bilangan kedua : ";
cin>>n2;
beda=n1-n2;
} };
hasil kelas: plus publik, minus publik
{
publik:
tampilan kosong()
{
Untuk Tambahan:
Masukkan angka pertama: 1
Untuk Pengurangan:
Masukkan angka pertama: 3
Jumlah 1 dan 2 = 3
Selisih 3 dan 4 = -1
5 .Pewarisan Hierarkis: - Mewarisi adalah metode pewarisan di mana satu atau lebih kelas turunan
diturunkan dari kelas basis umum.
Masukkan Nomor : 3
Pointer, Fungsi Virtual dan Polimorfisme: Pendahuluan, Manajemen Memori, Operator baru dan Hapus
Operator, Pointer ke Objek, Pointer ini, Pointer ke
Kelas Turunan, Polimorfisme, kompilasi polimorfisme waktu, Jalankan polimorfisme waktu, Virtual
Fungsi, Fungsi Virtual Murni, Kelas Basis Virtual, Penghancur Virtual, Fungsi
Overloading, Operator overloading, Aturan untuk Operator overloading-operator biner dan unary.
Objek data yang dibuat di dalam blok dengan new , akan tetap ada sampai secara eksplisit
dihancurkan dengan menggunakan delete .
operator baru:-
operator baru dapat digunakan untuk membuat objek jenis apa pun. Oleh karena itu, operator
baru mengalokasikan memori yang cukup untuk menyimpan data objek dan mengembalikan alamat
memori yang dialokasikan. Sintaksis:
>
Untuk membuat ruang memori untuk array: pointer-variable = new data-type[size];
d hapus operator:
Jika variabel atau objek tidak lagi diperlukan atau diperlukan dihancurkan oleh operator " hapus ",
maka sejumlah memori dilepaskan untuk tujuan masa depan. Sintaksis:
Misalnya: hapus p;
>
Jika kita ingin membebaskan file yang dialokasikan secara dinamis
array: hapus variabel-penunjuk [ukuran];
Program: tulis program untuk menemukan jumlah daftar bilangan bulat #include<iostream> using namespace
std; int utama()
{
int n,*p;
cout<<"Masukkan ukuran array:";
cin>>n;
p=new int[n];
cout<<"Masukkan daftar bilangan bulat"<<endl;
untuk(int i=0;i<n;i++)
cin>>p[i];
// logika untuk penjumlahan
int s=0;
untuk( int i=0;i<n;i++)
s=s+p[i];
cout<<"Jumlah elemen array adalah\n";
cout<<s;
hapus [ ]p;
kembali 0;
}
Masukkan ukuran larik:5
Masukkan daftar bilangan bulat
1 2345
Jumlah elemen array adalah
15
sampel; //obyek
int sampel ::*p;//deklarasi pointer
s.*p=10; //benar
cout<<s.*p;
}
Pointer ke Objek: Pointer ke objek berguna untuk membuat objek saat dijalankan. Untuk mengakses operator
panah anggota ( ) dan operator referensi atau tipuan (*) digunakan.
Deklarasi penunjuk .
namakelas*ptr
mantan:
barang *obj;
Di sini obj adalah penunjuk ke objek bertipe item.
barang kelas
{
kode int;
harga mengambang;
publik:
batal getdata(int a,float b)
{
kode=a;
harga=b;
}
batal tampilkan()
{
cout<<"kode:"<<kode<<"\n"<<"Harga:"<<harga<<endl;
}
};
b) menggunakan penunjuk
ptr->getdata(101,77.7);
ptr->tampilkan();
c) Menggunakan operator referensi dan operator titik (*ptr).getdata(101,77.7);
(*ptr).tampilkan();
Deklarasi di atas menciptakan ruang memori untuk array 10 objek bertipe item.
Pointer ke Kelas Turunan: Pointer dapat dideklarasikan ke kelas turunan. itu dapat digunakan untuk
mengakses anggota kelas dasar dan kelas turunan. Pointer kelas dasar juga dapat digunakan untuk menunjuk
ke objek kelas turunan tetapi hanya dapat mengakses anggota yang diwarisi dari kelas dasar.
#sertakan<iostream.h>
basis kelas
{
publik:
int a;
batal get_a(int x)
{
a=x;
}
batal display_a()
{
cout<<"Dalam basis"<<"\n"<<"a="<<a<<endl;
}
};
turunan kelas: basis publik
{
int b;
publik:
batal get_ab(int x,int y)
{
a=x;
b=y;
}
batal display_ab()
{
cout<<"Dalam Turunan "<<"\n"<<"a="<<a<<"\nb="<<b<<endl;
}
};
int utama()
{
dasar b;
basis *bptr;
bptr=&b;//menunjuk ke objek kelas dasar
bptr->get_a(100);
bptr->display_a();
turunan d;
turunan *dptr;
dptr=&d;//menunjuk ke objek dari kelas turunan
dptr->get_a(400);
dptr->display_a();
dptr->get_ab(300.200);
dptr->display_ab();
kembali 0;
}
Keluaran:
Di dasar
a=100
Di dasar
a=400
Dalam Berasal
a=300
b=200
Di dasar
a=400
Polimorfisme mengacu pada properti dimana objek milik kelas yang berbeda dapat menanggapi pesan
yang sama, tetapi bentuk yang berbeda. Oleh karena itu, persyaratan penting polimorfisme adalah kemampuan
untuk merujuk ke objek tanpa memperhatikan kelasnya.
Saat kita menggunakan nama fungsi yang sama di kelas dasar dan kelas turunan, fungsi di kelas bas
dideklarasikan sebagai virtual menggunakan kata kunci virtual sebelum deklarasi normalnya.
Ketika sebuah fungsi dibuat virtual, C++ menentukan fungsi mana yang akan digunakan pada saat runtime
berdasarkan tipe objek yang ditunjuk oleh pointer dasar, bukan tipe pointer. Jadi, dengan membuat pointer
dasar untuk menunjuk ke objek yang berbeda, kita dapat menjalankan versi yang berbeda dari fungsi virtual.
#sertakan<iostream.h>
Basis kelas
{
publik:
tampilan kosong()
{
cout<<"Basis Tampilan";
}
pertunjukan kekosongan virtual ()
{
cout<<”Tampilkan Basis”;
}
};
kelas Turunan: Basis publik
{
publik:
tampilan kosong()
{
cout<<”Tampilan Diturunkan”;
}
batal tampilkan()
{
cout<<”tampilkan turunan”;
}
};
batal utama()
{
Basis b;
Berasal d;
Basis *ptr;
cout<<"ptr menunjuk ke Basis";
ptr=&b;
ptr->tampilan(); //memanggil Basis
ptr->tampilkan(); //memanggil Basis
cout<<”poin ptr ke turunan”;
ptr=&d;
ptr->tampilan(); //memanggil Basis
ptr->tampilkan(); // turunan kelas
}
Keluaran:
Basis Tampilan
Tampilkan Berasal
Ketika ptr dibuat untuk menunjuk ke objek d, pernyataan ptr->display(); hanya memanggil fungsi
terkait dengan Basis yaitu. Basis::tampilan()
ptr->tampilkan();
memanggil versi turunan dari show(). Ini karena fungsi display() belum dibuat virtual di kelas Base.
Saat fungsi virtual dibuat untuk mengimplementasikan pengikatan akhir, amati beberapa aturan dasar
yang memenuhi persyaratan kompiler.
OVERLOATOR OPERATOR
C ++ memiliki kemampuan untuk menyediakan operator dengan arti khusus untuk tipe data. Mekanisme
pemberian arti khusus tersebut kepada operator dikenal sebagai operator overloading. Kami dapat
membebani semua operator kecuali yang berikut:
Operator akses anggota kelas (“.” Dan "
.*”) Operator resolusi cakupan “::”
Operator ukuran (sizeof)
Operator bersyarat
Untuk menentukan tugas tambahan ke operator, tentukan artinya dalam kaitannya dengan kelas tempat
operator diterapkan. Ini dilakukan dengan bantuan fungsi khusus, yang disebut fungsi operator. Proses
overloading melibatkan langkah-langkah berikut:
1. Buat kelas yang mendefinisikan tipe data yang akan digunakan dalam operasi kelebihan muatan.
2. Deklarasikan fungsi operator operator op() di bagian publik kelas. Ini mungkin fungsi anggota atau
fungsi teman.
3. Di sini op adalah operator yang akan kelebihan beban.
4. Tentukan fungsi operator untuk mengimplementasikan operasi yang diperlukan.
Mantan:
kompleks kompleks::operator+(kompleks c)
{
t kompleks;
t.nyata=nyata+c.nyata;
t.img=img+c.img;
kembali t;
}
Konsep Overloading Operator
Salah satu fitur unik C++ adalah Operator Overloading. Menerapkan overloading pada operator berarti,
operator yang sama dalam merespon berbeda. Misalnya operator + dapat digunakan sebagai operator gabungan
sekaligus operator tambahan.
Mantan:
batal operator-()
{
nyata=-nyata;
img=-img;
}
Sintaks untuk Operator Unary (Di luar kelas)
tipe kembalian nama kelas::operator operatorsimbol( )
{
//badan fungsi
}
Contoh 1:-
membatalkan operator++()
{
penghitung++;
}
Contoh 2:-
batal kompleks::operator-()
{
nyata=-nyata;
img=-img;
}
a=0;
} fakta (int i) {
a=saya;
}
operator fakta!()
{
int f=1,i;
fakta t;
untuk (i=1;i<=a;i++)
{
f=f*i;
}
ta=f;
kembali t;
}
tampilan kosong()
{
cout<<"Faktoral"<<a;
}
};
batal utama()
{
int x;
cout<<"Masukkan Angka";
cin>>x;
fakta s(x),p;
p=!s;
p.tampilan();
}
Penjelasan:
Kami telah mengambil '!' sebagai operator untuk membebani. Di sini nama kelas adalah fakta. Konstruktor
tanpa parameter mengambil nilai awal 'x' sebagai 0. Konstruktor dengan parameter untuk mengambil nilai 'x' .
Kami telah membuat dua objek satu untuk melakukan faktorial dan yang lainnya untuk mengembalikan
faktorial. Di sini jumlah parameter untuk fungsi kelebihan beban adalah 0. Faktorial adalah operator unary
karena beroperasi pada satu dataitem. operator overloading menemukan faktorial dari objek. Fungsi tampilan
untuk mencetak hasil.
Contoh 1:-
Tulis program untuk membebani operator unary -
#termasuk<iostream>
menggunakan namespace std;
kompleks kelas
{
float nyata,img;
publik:
kompleks();
kompleks(float x, float y);
tampilan kosong();
batal operator-();
};
kompleks::kompleks()
{
real=0;img=0;
}
kompleks::kompleks(float x, float y)
{
nyata=x;
img=y;
}
batal kompleks::tampilan()
{
int gambar=img;
jika(img<0)
{
gambar=-img;
cout<<nyata<<" -i"<<gambar<<endl;
}
kalau tidak
cout<<nyata<<" +i"<<img<<endl;
}
batal kompleks::operator-()
{
nyata=-nyata;
img=-img;
}
int utama()
{
kompleks c(1,-2);
c.tampilan();
cout<<"Setelah Unary - operasi\n";
-C;
c.tampilan();
}
Contoh 2:-
#sertakan<iostream.h>
menggunakan namespace std;
ruang kelas
{
int x,y,z;
publik:
batal getdata(int a,int b,int c);
tampilan kosong();
batal operator-();
};
ruang hampa :: getdata(int a,int b,int c)
{
x=a;
y=b;
z=c;
}
ruang kosong :: tampilan()
{
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
cout<<"z="<<z<<endl;
}
ruang kosong :: operator-()
{
x=-x;
y=-y;
z=-z;
}
int utama()
{
ruang s;
s.getdata(10,-20,30);
s.tampilan();
-S;
cout<<"setelah negasi\n";
s.tampilan();
}
Keluaran:
x=10
y=-20
z=30
setelah negasi
x=-10
y=20
z=-30
Dimungkinkan untuk membebani operator minus unary menggunakan fungsi teman sebagai berikut:
teman batal operator-(spasi & s);
Contoh 3:-
Operator minus unary menggunakan fungsi teman
#sertakan<iostream.h>
#sertakan<iostream.h>
menggunakan namespace std;
ruang kelas
{
int x,y,z;
publik:
batal getdata(int a,int b,int c);
tampilan kosong();
teman batal operator-(spasi &);
};
ruang hampa :: getdata(int a,int b,int c)
{
x=a;
y=b;
z=c;
}
int utama()
{
ruang S;
S.getdata(10,-20,30);
S.tampilan();
-S;
cout<<"setelah negasi\n";
S.tampilan();
}
Keluaran:
10 -20 30
setelah negasi
-10 20-30
Sintaks untuk Operator Biner (Di dalam kelas) simbol operator tipe-kembali(argumen) {
//badan fungsi
}
Sintaks untuk definisi Operator Biner (Di luar kelas) tipe-kembali nama kelas:: operator operator
simbol (argumen) {
//badan fungsi
}
Buatlah program untuk membebani operator aritmatika pada bilangan kompleks menggunakan fungsi
anggota
#sertakan<iostream.h>
kompleks kelas
{
float nyata,img;
publik:
kompleks(){ }
kompleks(float x, float y)
{
nyata=x;
img=y;
}
operator kompleks+(kompleks c) batal tampilan();
};
kompleks kompleks::operator+(kompleks c)
{
suhu kompleks;
temp.real=nyata+c.nyata;
temp.img=img+c.img;
suhu kembali;
}
batal kompleks::tampilan()
{
int gambar=img;
Jika(img<0)
{
gambar=-gambar;
cout<<nyata<<"-i"<<gambar;
} else cout<<nyata<<”+i”<<img;
}
int utama()
{
kompleks c1,c2,c3;
c1=kompleks(2.5,3.5);
c2=kompleks(1.6,2.7);
c3=c1+c2;
c3.tampilan();
kembali 0;
}
Overloading Operator Biner Menggunakan Teman
1. Ganti deklarasi fungsi anggota dengan deklarasi fungsi teman di operator kompleks teman kelas +
(kompleks, kompleks)
2. Definisikan ulang fungsi operator sebagai berikut:
operator kompleks+(kompleks a, kompleks b)
{
return complex((a.x+bx),(a.y+by));
}
Tulis program untuk memuat operator aritmatika pada bilangan kompleks menggunakan fungsi friend
#include<iostream.h>
kompleks kelas
{
float nyata,img;
publik:
kompleks(){ }
kompleks(float x, float y)
{
nyata=x;
img=y;
}
operator kompleks teman + (kompleks);
tampilan kosong();
};
operator kompleks+(kompleks c1, kompleks c2)
{
suhu kompleks;
temp.real=c1.real+c2.real;
temp.img=c1.img+c2.img;
suhu kembali;
}
batal kompleks::tampilan()
{
Jika(img<0)
{
img=-img;
cout<<nyata<<”-i”<<img;
}
kalau tidak
cout<<nyata<<”+i”<<img;
}
int utama()
{
kompleks c1,c2,c3;
c1=kompleks(2.5,3.5);
c2=kompleks(1.6,2.7);
c3=c1+c2;
c3.tampilan();
kembali 0;
}
UNIT 5
Konsep Templat
Perkenalan
Alih-alih menulis fungsi yang berbeda untuk tipe data yang berbeda, kita dapat mendefinisikan yang umum
fungsi. Misalnya
Fungsi template adalah cara membuat abstrak fungsi/kelas dengan membuat perilaku fungsi tanpa mengetahui
data apa yang akan ditangani oleh suatu fungsi. Dalam arti tertentu inilah yang dikenal sebagai "fungsi atau
pemrograman umum".
Fungsi template lebih fokus pada pemikiran algoritmik daripada cara spesifik tipe data tunggal. Misalnya,
Anda dapat membuat fungsi push stack dengan templat. Fungsi push ini dapat menangani operasi penyisipan
ke tumpukan pada tipe data apa pun daripada harus membuat fungsi push tumpukan untuk setiap jenis yang
berbeda.
Sintaksis:
templat < tipe kelas >
ret_type fun_name(daftar parameter)
{
--------------//badan fungsi
} //www.suhritsolutions.com
Fitur template:-
1. Ini menghilangkan kode yang berlebihan
2. Ini meningkatkan penggunaan kembali kode.
3. Ini memberikan fleksibilitas yang besar untuk bahasa
Template diklasifikasikan menjadi dua jenis. Mereka
1 .Fungsi template
2 .Kelas Templat.
Templat Fungsi
Templat yang dideklarasikan untuk fungsi disebut sebagai templat fungsi. Templat fungsi menentukan
bagaimana fungsi individu dapat dibangun.
Sintaks :
templat < tipe kelas,………>
ret _type fun_ name(argumen)
{
-----------------// badan fungsi
-----------------
}
TEMPLAT KELAS
Templat yang dideklarasikan untuk kelas disebut templat kelas. Sebuah template kelas menentukan
bagaimana masing-masing kelas dapat dibangun mirip dengan spesifikasi kelas normal. Kelas-kelas ini
memodelkan kelas generik yang mendukung operasi serupa untuk tipe data yang berbeda. Bentuk Umum
Templat Kelas
…; ….
}
Kelas yang dibuat dari template kelas disebut kelas template. Sintaks untuk mendefinisikan objek dari kelas
templat adalah:
classname<type> objectname(arglist);
#sertakan<iostream.h>
#sertakan<conio.h>
templat pertukaran kelas <kelas T>
{
T a, b;
publik:
tukar(T x,T y)
{
a=x;
b=y;
}
membatalkan swapab()
{
T suhu;
suhu=a;
a=b;
b=temp;
}
batalkan showdata()
{
cout<<a<<b;
}
};
batal utama()
{
int m,n;
mengapung m1,n1;
cout<<"Masukkan Nilai Integer";
cin>>m>>n;
cout<<”Masukkan nilai mengambang”;
cin>>m1>>n1;
tukar<int> c1(m,n);
tukar<float> c2(m1,n1);
c1.swapab();
c1.showdata();
c2.swapab();
c2.showdata();
}
Sintaksis:
Tes(T1 x,T2 y)
{ a=x; b=y;
}
batal tampilkan()
{
cout<<a<<b;
}
};
batal utama()
{
Uji<float,int> uji1(1,23,123);
Tes<int,char> tes2(100,'w');
test1.show();
test2.show();
}
TEMPLATE FUNGSI
Seperti template kelas, kita juga bisa mendefinisikan template fungsi yang akan digunakan untuk membuat
keluarga fungsi dengan tipe argumen yang berbeda.
Formulir Umum:
templat <kelas T>
nama-fungsi tipe-kembali (argumen tipe T)
{}
#sertakan<iostream.h>
templat<kelas T>
batal menukar (T &x, T &y)
{
T suhu = x;
x=y;
y=suhu;
}
batal menyenangkan(int m,int n,float a,float b)
{
cout<<m<<n;
tukar(m,n);
cout<<m<<n;
cout<<a<<b;
tukar(a,b);
cout<<a<<b;
}
int utama()
{
menyenangkan(100.200,11,22,33,44);
kembali 0;
}
Contoh 2:-
#sertakan < iostream.h >
#termasuk < conio.h >
templat
T maks(T a, T b)
{
jika(a>b)
kembalikan;
kalau tidak
kembali b;
}
batal utama( )
{
char ch1,ch2,ch3;
cout<<"masukkan dua karakter"<< ch2<< ch3;
cin>>ch2>>ch3;
d=maks(ch2,ch3);
cout<<”maks(ch2,ch3)”<<ch1;
int a,b,c;
cout<<"masukkan dua bilangan bulat:";
cin>>a>>b;
c=maks(a,b);
cout<<"max(a,b):"<<c<<endl;
mengapung f1,f2,f3;
cout<<"masukkan dua float< f1f2 >:";
cin>>f1,f2;
f3=maks(f1,f2);
cout<<”maks(f1,f2):”<<f3;
}
keluaran:
masukkan dua karakter: A,B
maks(ch2,ch3):B
masukkan dua bilangan bulat: 20,10
maks (a,b) :20
masukkan dua pelampung :20.5,30.9
maks (f1,f2) :30,9
#sertakan<iostream.h>
#termasuk<string.h>
templat<kelas T1, kelas T2> tampilan kosong(T1 x,T2 y) {
cout<<x<<y;
}
int utama()
{
tampilkan(1999,”EBG”);
tampilan(12.34,1234);
kembali 0;
}
Penanganan pengecualian
Pengecualian: Pengecualian adalah anomali runtime atau kondisi tidak biasa yang mungkin ditemui program
saat mengeksekusi .Anomali mungkin termasuk kondisi seperti pembagian dengan nol, mengakses array di
luar batasnya atau kehabisan memori atau ruang disk. Ketika sebuah program menemukan kondisi
pengecualian, itu harus diidentifikasi dan ditangani.
Pengecualian menyediakan cara untuk mentransfer kontrol dari satu bagian program ke bagian lainnya.
Penanganan pengecualian C++ dibangun di atas tiga kata kunci: coba, tangkap, dan lempar.
1. Pengecualian sinkron: Kesalahan seperti "Indeks di luar jangkauan" dan "over flow" adalah pengecualian
sinkron
2. Pengecualian asinkron: Kesalahan yang dihasilkan oleh peristiwa apa pun di luar kendali program disebut
pengecualian asinkron
Tujuan penanganan pengecualian adalah untuk menyediakan sarana untuk mendeteksi dan melaporkan
keadaan luar biasa
Penanganan pengecualian C++ dibangun di atas tiga kata kunci: coba, tangkap, dan lempar.
Try digunakan untuk mengawali blok pernyataan yang dapat menghasilkan pengecualian. Blok pernyataan ini dikenal
sebagai blok try. Ketika pengecualian terdeteksi, ia dilempar dengan menggunakan pernyataan lemparan di blok try. Blok
catch menangkap pengecualian yang dilempar oleh pernyataan throw di blok try dan menanganinya dengan tepat.
#termasuk<iostream>
menggunakan namespace std;
int utama()
{
int a,b;
cout<<"Masukkan sembarang dua bilangan bulat";
cin>>a>>b;
int x=ab;
mencoba
{
jika(x!=0)
{
cout<<"Hasil(a/x)="<<a/x<<endl;
}
kalau tidak
{ lempar x;
}
}
tangkap (int ex)
{
cout<<"Pengecualian tertangkap: Bagi Dengan Nol \n";
}
}
MEKANISME PEMBUATAN
Ketika pengecualian terdeteksi, itu dapat dimunculkan dengan menggunakan pernyataan lemparan dalam salah
satu dari bentuk berikut
lempar(pengecualian); membuang pengecualian;
melemparkan;
MEKANISME PENANGKAPAN:
• Saat pengecualian dilemparkan, penangan pengecualian dicari untuk mendapatkan kecocokan yang
sesuai.
• Ada kemungkinan bahwa argumen dari beberapa pernyataan tangkapan cocok dengan jenis
pengecualian. Dalam kasus seperti itu, penangan pertama yang cocok dengan tipe pengecualian
dijalankan
cout<<"menangkap dua"<<endl;
}
}
int utama()
{
tes(1);
tes(0);
tes(-1);
tes(2);
kembali 0;
}
Keluaran:
menangkap bilangan bulat
menangkap karakter
menangkap ganda
akhir blok percobaan
semua kemungkinan jenis pengecualian dan karena itu mungkin tidak dapat merancang penangan tangkapan
independen untuk menangkapnya. Dalam keadaan seperti itu, kita dapat memaksakan pernyataan catch untuk
menangkap semua pengecualian, bukan tipe tertentu saja.
menangkap(…)
{}
kembali 0;
}
Dimungkinkan untuk meneruskan pengecualian yang ditangkap oleh blok tangkap lagi ke penangan
pengecualian lain. Ini saya dikenal sebagai Re-throwing.
#termasuk <iostream>
menggunakan namespace std;
membatalkan MyHandler()
{ mencoba {
melempar "halo";
}
tangkap (const char*)
{
cout<<"Tertangkap pengecualian di dalam MyHandler\n";
melemparkan; // rethrow char* keluar dari fungsi
}
}
int utama()
{ cout<<"Awal utama. ."<<endl; coba
{
MyHandler();
}
tangkap(const char*)
{
cout<<"Tertangkap pengecualian di dalam Main\n";
}
cout<<"Ujung Utama";
kembali 0;
}
Menentukan Pengecualian:
Spesifikasi pengecualian membatasi fungsi untuk melempar beberapa pengecualian yang ditentukan hanya
dengan menggunakan throw(exception list) di header fungsi.
Bentuk umum
Ketik function_name(argument list) throw(exceptions -list)
{
Pernyataan
mencoba {
pernyataan
}
#termasuk <iostream>
menggunakan namespace std;
uji batal(int x) lempar(int,float,char)
{
beralih (x)
{
kasus 1: lempar x;
merusak;
kasus 2: lempar 'x';
merusak;
kasus 3:melempar ganda(x);
merusak;
kasus 4: lempar pelampung(x);
merusak;
}
}
int utama()
{
mencoba
{
test(4);//test(4) menyebabkan pemutusan abnormal
}
tangkap (int i)
{
cout<<"Tertangkap pengecualian tipe int\n";
}
tangkap (mengambang f)
{
cout<<"Pengecualian tipe float yang tertangkap\n";
}
tangkap (karakter c)
{
cout<<"Pengecualian tipe karakter yang tertangkap\n";
}
menangkap (ganda saya)
{
cout<<"Tertangkap Pengecualian Tipe Ganda\n";
}
kembali 0;
}