.
Home » , » Belajar C++ Bag.11

Belajar C++ Bag.11

Unknown | 04.50 | 0 komentar
Pelajaran 11 - typecasting
Typecasting adalah membuat variabel dari satu jenis, seperti int, bertindak seperti jenis lain, char, untuk satu operasi tunggal. Untuk typecast sesuatu, hanya menempatkan jenis variabel yang Anda inginkan variabel yang sebenarnya untuk bertindak sebagai dalam kurung di depan variabel yang sebenarnya. (Char) akan membuat 'a' berfungsi sebagai char.
Sebagai contoh:


 
# Include

 
menggunakan namespace std;

 
int main ()
 
{
  
cout << (char) 65 << "\ n";
  
/ / The (char) adalah sebuah typecast, memberitahu komputer untuk menafsirkan 65 sebagai
  
/ / Karakter, bukan sebagai angka. Hal ini akan memberikan output karakter
  
/ / Setara dengan angka 65 (Harus huruf A untuk ASCII).
  
cin.get ();
 
}

Satu digunakan untuk typecasting adalah ketika Anda ingin menggunakan karakter ASCII. Sebagai contoh, bagaimana jika Anda ingin membuat grafik Anda sendiri semua 256 karakter ASCII. Untuk melakukan ini, Anda akan perlu menggunakan typecast untuk memungkinkan Anda untuk mencetak integer sebagai setara karakter.


 
# Include

 
menggunakan namespace std;

 
int main ()
 
{
  
for (int x = 0; x <256, x + +) {
    
cout << x << << (char) x << "" ".";
    
/ / Perhatikan penggunaan versi int x untuk
    
/ / Output nomor dan penggunaan (char) untuk
    
/ / X typecast ke karakter
    
/ / Output yang karakter ASCII yang
    
/ / Sesuai dengan jumlah saat ini
  
}
  
cin.get ();
 
}

The typecast dijelaskan di atas adalah cor C-gaya, C + + mendukung dua jenis lainnya. Pertama adalah cor fungsi-style:

 
int main ()
 
{
  
cout << char (65) << "\ n";
  
cin.get ();
 
}

Ini lebih seperti pemanggilan fungsi dari gips sebagai jenis yang akan dilemparkan seperti nama fungsi dan nilai yang akan dicor adalah seperti argumen ke fungsi. Berikutnya adalah pemain bernama, yang ada empat:


 
int main ()
 
{
  
cout << static_cast <char> (65) << "\ n";
  
cin.get ();
 
}

static_cast memiliki fungsi yang serupa dengan cast yang lain dijelaskan di atas, tapi nama membuatnya lebih mudah untuk menemukan dan kurang menggoda untuk menggunakan karena itu cenderung menjadi jelek. Typecasting harus dihindari sebisa mungkin. Tiga lainnya jenis gips dinamai const_cast, reinterpret_cast, dan dynamic_cast. Mereka tidak ada gunanya bagi kita saat ini.
Pelajaran 12 - Kelas
C + + adalah sekelompok penambahan kecil untuk C, dan satu tambahan besar. Penambahan satu adalah pendekatan berorientasi objek. Seperti namanya, ini berhubungan dengan benda-benda. Tentu saja, ini bukan kehidupan nyata benda. Sebaliknya, obyek adalah definisi penting dari objek dunia nyata. Kelas adalah koleksi data yang terkait dengan suatu jenis objek tunggal. Kelas tidak hanya mencakup informasi mengenai objek dunia nyata, tapi juga berfungsi untuk mengakses data, dan kelas memiliki kemampuan untuk mewarisi dari kelas lain. Warisan tercakup dalam pelajaran berikutnya.
Apa ini binatang misterius? Yah, bukan hanya kumpulan variabel di bawah satu judul, tetapi merupakan kumpulan fungsi di bawah bahwa pos yang sama. Jika kelas adalah rumah, maka fungsi akan menjadi pintu dan variabel akan menjadi item dalam rumah. Mereka biasanya akan menjadi satu-satunya cara untuk memodifikasi variabel dalam struktur ini, dan mereka biasanya hanya untuk mengakses variabel dalam struktur ini. Ide untuk membuat program lebih modular - enkapsulasi. Sebuah bagian dari kode akan memiliki fungsi sendiri dan variabel yang mengontrol apa yang dapat dilakukan, dan tidak memerlukan apapun di luar dirinya sendiri berfungsi. Sementara kelas mungkin memerlukan inisialisasi dengan data, tidak memerlukan variabel luar atau fungsi untuk memanipulasi data. Yang memungkinkan program untuk menggunakan kembali kode yang sama lebih mudah.
Sintaks untuk kelas-kelas sederhana. Pertama, Anda menempatkan 'kelas' kata kunci maka nama kelas. Contoh kita akan menggunakan nama komputer. Kemudian Anda menempatkan braket terbuka. Sebelum meletakkan variabel yang berbeda, maka perlu untuk menempatkan tingkat pembatasan variabel. Ada tiga tingkat pembatasan. Yang pertama adalah publik, yang kedua dilindungi, dan pribadi ketiga. Untuk saat ini, semua yang perlu Anda ketahui adalah bahwa pembatasan umum memungkinkan setiap bagian dari program, termasuk yang bukan bagian dari kelas, mengakses variabel ditentukan sebagai publik. Pembatasan dilindungi mencegah fungsi luar kelas untuk mengakses variabel. Sintaks untuk itu hanyalah kata kunci pembatasan (publik, swasta, dilindungi) dan kemudian titik dua. Akhirnya, Anda menempatkan variabel yang berbeda dan fungsi (Anda biasanya hanya akan menempatkan prototipe fungsi) Anda ingin menjadi bagian dari kelas. Kemudian Anda meletakkan tanda kurung tutup dan titik koma. Perlu diingat bahwa Anda masih harus mengakhiri prototipe fungsi (s) dengan usus semi-.
Kelas harus selalu mengandung dua fungsi: konstruktor dan destruktor. Sintaks untuk mereka sederhana, nama kelas menunjukkan konstruktor, sebuah ~ sebelum nama kelas adalah destructor. Ide dasarnya adalah untuk memiliki variabel konstruktor menginisialisasi, dan memiliki destructor membersihkan setelah kelas, yang meliputi membebaskan setiap memori yang dialokasikan. Satu-satunya waktu konstruktor disebut adalah ketika programmer menyatakan sebuah instance dari kelas, yang secara otomatis akan memanggil konstruktor. Satu-satunya waktu destructor disebut adalah ketika instance dari kelas tidak lagi diperlukan. Ketika program berakhir, atau ketika memori deallocated (jika Anda tidak mengerti bagian dealokasi, jangan khawatir). Terus dalam pikiran ini: BAIK konstruktor NOR destructors KEMBALI ARGUMEN AN! Ini berarti Anda tidak ingin mencoba untuk mengembalikan nilai di dalamnya.
Sintaks untuk mendefinisikan sebuah fungsi yang merupakan anggota dari kelas di luar definisi kelas yang sebenarnya adalah untuk menempatkan jenis kembali, kemudian menempatkan nama kelas, dua titik dua, dan kemudian nama fungsi. Ini memberitahu compiler bahwa fungsi merupakan anggota dari kelas itu.
Sebagai contoh:


 
# Include

 
menggunakan namespace std;

 
Kelas Komputer Cara / / Standar mendefinisikan kelas
 
{
 
publik:
  
/ / Hal ini berarti bahwa semua fungsi di bawah ini (dan setiap variabel)
  
/ / Dapat diakses ke seluruh program.
  
/ / CATATAN: Itu adalah usus, BUKAN titik koma ...
  
Komputer ();
  
/ / Konstruktor
  
~ Komputer ();
  
/ / Destructor
  
batal setspeed (int p);
  
int readspeed ();
 
dilindungi:
  
/ / Hal ini berarti bahwa semua variabel di bawah ini, sampai tipe baru
  
/ / Pembatasan ditempatkan, hanya akan dapat diakses oleh fungsi-fungsi lain dalam
  
/ / Kelas. CATATAN: Itu adalah usus, BUKAN titik koma ...
  
int processorspeed;
 
};
 
/ / Jangan lupa mengikuti semi-kolon

 
Komputer :: Computer ()
 
{
  
/ / Konstruktor dapat menerima argumen, tapi yang satu ini tidak
  
processorspeed = 0;
 
}

 
Komputer :: ~ Computer ()
 
{
  
/ / Destructors tidak menerima argumen
 
}

 
batal Komputer :: setspeed (int p)
 
{
  
/ / Untuk mendefinisikan fungsi luar menempatkan nama kelas
  
/ / Setelah jenis kembali dan kemudian dua titik dua, dan kemudian nama
  
/ / Fungsi.
  
processorspeed = p;
 
}
 
int Komputer :: readspeed ()
 
{
  
/ / Dua titik dua hanya memberitahu compiler bahwa fungsi merupakan bagian
  
/ / Dari clas
  
kembali processorspeed;
 
}

 
int main ()
 
{
  
Komputer menghitung;
  
/ / Untuk membuat 'instance' kelas, hanya memperlakukannya seperti Anda akan
  
/ / Struktur. (Misalnya Sebuah hanya ketika Anda membuat sebuah objek yang sebenarnya
  
/ / Dari kelas, sebagai lawan untuk memiliki definisi kelas)
  
compute.setspeed (100);
  
/ / Untuk memanggil fungsi-fungsi di kelas, Anda menempatkan nama contoh,
  
/ / Periode, dan kemudian nama fungsi.
  
cout << compute.readspeed ();
  
/ / Lihat di atas catatan.
 
}

Pengenalan ini jauh dari lengkap dan merekomendasikan praktek-praktek yang tidak selalu pilihan terbaik. Hal ini dilakukan untuk kesederhanaan. Untuk lebih detail, saya sarankan menggunakan google.
Pelajaran 13 - Fungsi Lanjutan
Dalam pelajaran 4 Anda diberi informasi dasar tentang fungsi. Namun, saya ditinggalkan salah satu item yang menarik. Item yang fungsi inline. Fungsi inline tidak sangat penting, tapi itu baik untuk memahami mereka. Ide dasarnya adalah untuk menghemat waktu dengan biaya dalam ruang. Fungsi inline banyak seperti placeholder. Setelah Anda mendefinisikan fungsi inline, menggunakan 'inline' kata kunci, setiap kali Anda memanggil fungsi compiler akan menggantikan fungsi panggilan dengan kode aktual dari fungsi.
Bagaimana hal ini membuat program berjalan lebih cepat? Sederhana, panggilan fungsi adalah waktu hanya lebih memakan daripada menulis semua kode tanpa fungsi. Untuk pergi melalui program anda dan mengganti fungsi Anda telah menggunakan 100 kali dengan kode dari fungsi akan memakan waktu tidak terlalu terang. Tentu saja, dengan menggunakan fungsi inline untuk menggantikan fungsi panggilan dengan kode Anda juga akan sangat meningkatkan ukuran program Anda.
Menggunakan kata kunci inline sederhana, hanya menempatkan sebelum nama fungsi. Kemudian, bila Anda menggunakan fungsi itu, berpura-pura itu adalah fungsi non-inline.
Sebagai contoh:


 
# Include

 
menggunakan namespace std;

 
inline batal halo ()
 
{
  
cout << "Halo";
 
}
 
int main ()
 
{
  
halo (); / / Sebut saja seperti fungsi normal ...
  
cin.get ();
 
}

Namun, setelah program dikompilasi, panggilan ke Hello (); akan diganti dengan kode yang membentuk fungsi.
Sebuah KATA DARI PERINGATAN: fungsi Inline sangat baik untuk menghemat waktu, tetapi jika Anda menggunakannya terlalu sering atau dengan fungsi besar Anda akan memiliki program sangat besar. Kadang-kadang program besar sebenarnya kurang efisien, dan karena itu mereka akan berjalan lebih lambat dari sebelumnya. Fungsi inline yang terbaik untuk fungsi-fungsi kecil yang disebut sering.
Di masa depan, kita akan membahas fungsi inline dalam hal C + + kelas. Namun, sekarang bahwa Anda memahami konsep saya akan merasa nyaman menggunakan fungsi inline di tutorial selanjutnya.
Pelajaran 14 - Garis Komando Menerima
Dalam C + + adalah mungkin untuk menerima argumen baris perintah. Untuk melakukannya, Anda harus terlebih dahulu memahami definisi penuh int main (). Ini benar-benar menerima dua argumen, satu adalah jumlah argumen baris perintah, yang lain adalah daftar argumen baris perintah.
Ini terlihat seperti ini:


 
int main (int argc, char * argv [])

Integer, argc adalah Count argumen (argc maka). Ini adalah jumlah argumen dilewatkan ke dalam program dari baris perintah, termasuk nama program.
Array dari pointer karakter adalah daftar semua argumen. argv [0] adalah nama program, atau string kosong jika nama tidak tersedia. Setelah itu, setiap nomor elemen kurang dari argc adalah argumen baris perintah. Anda dapat menggunakan setiap elemen argv seperti string, atau menggunakan argv sebagai array dua dimensi. argv [argc] adalah pointer null.
Bagaimana ini bisa digunakan? Hampir setiap program yang ingin parameternya harus ditetapkan ketika dieksekusi akan menggunakan ini. Salah satu penggunaan umum adalah untuk menulis fungsi yang mengambil nama file dan output seluruh teks itu ke layar.


 
# Include <fstream>
 
# Include

 
menggunakan namespace std;

 
int main (int argc, char * argv [])
 
{
  
if (argc = 2!) / / argc harus 2 untuk pelaksanaan yang benar
    
/ / Kami mencetak argv [0] dengan asumsi itu adalah nama program
    
cout << "penggunaan:" << argv [0] << "<filename> \ n";
  
else {
    
/ / Kita asumsikan argv [1] adalah nama file untuk membuka
    
ifstream file_itu (argv [1]);
    
/ / Selalu periksa untuk melihat apakah berhasil membuka berkas
    
if (! the_file.is_open ())
      
cout << "Tidak dapat membuka file \ n";
    
else {
      
char x;
      
/ / The_file.get (x) mengembalikan false jika akhir file
      
/ / Tercapai atau terjadi kesalahan
      
sementara (the_file.get (x))
        
cout << x;
    
}
    
/ / File_itu ditutup secara implisit di sini
  
}
 
}

Program ini cukup sederhana. Ini menggabungkan versi lengkap dari utama. Maka pertama-tama memeriksa untuk memastikan pengguna menambahkan argumen kedua, secara teoritis nama file. Program ini kemudian memeriksa untuk melihat apakah file tersebut adalah benar dengan mencoba untuk membukanya. Ini adalah operasi standar yang efektif dan mudah. Jika file tersebut valid, itu akan dibuka dalam proses. Kode ini cukup jelas, namun dipenuhi dengan komentar, Anda seharusnya tidak memiliki kesulitan memahami operasi ini jauh ke tutorial.
Pelajaran 15 - Daftar Singely Linked
Daftar link adalah cara untuk menyimpan data dengan struktur sehingga programmer dapat secara otomatis membuat tempat baru untuk menyimpan data kapan pun diperlukan. Secara khusus, programmer menulis sebuah struct atau definisi kelas yang berisi variabel yang memegang informasi tentang sesuatu, dan kemudian memiliki pointer ke struct dari jenisnya. Masing-masing individu atau kelas struct dalam daftar umumnya dikenal sebagai node.
Anggap saja seperti kereta api. Programmer selalu menyimpan simpul pertama dari daftar. Ini akan menjadi mesin kereta. Pointer adalah penghubung antara mobil dari kereta. Setiap kali kereta menambahkan mobil, menggunakan konektor untuk menambahkan mobil baru. Ini adalah seperti seorang programmer menggunakan kata kunci baru untuk membuat pointer ke struct baru atau kelas.
Dalam memori sering digambarkan sebagai tampak seperti ini:


 
--------------------
 
- Data - data -
 
--------------------
 
- Pointer----> - Pointer-
 
--------------------

Representasi ini tidak sepenuhnya akurat, tetapi akan cukup untuk tujuan kita. Setiap blok besar adalah struct (atau kelas) yang memiliki pointer ke yang lain. Ingat bahwa pointer hanya menyimpan lokasi memori dari sesuatu, itu bukan hal yang, sehingga panah pergi ke yang berikutnya. Pada akhirnya, tidak ada untuk pointer untuk menunjuk ke, sehingga tidak menunjukkan apa pun, itu harus menjadi null pointer atau node dummy untuk mencegah sengaja menunjuk ke lokasi yang benar-benar sewenang-wenang dan secara acak dalam memori (yang sangat buruk).
Sejauh ini kita tahu apa struct simpul akan terlihat seperti:


 
struct simpul {
  
int x;
  
simpul * berikutnya;
 
};

 
int main ()
 
{
  
simpul akar *, / / ​​ini akan menjadi simpul pertama tidak berubah

  
akar simpul = baru; / / poin akar Sekarang untuk struct simpul
  
akar-> next = 0; / / titik node root untuk memiliki pointer berikutnya
                   
/ / Set sama dengan pointer null
  
akar-> x = 5; / / Dengan menggunakan - operator>, Anda dapat memodifikasi node
                   
/ / Pointer (akar dalam kasus ini) menunjuk ke.
 
}

Sejauh ini tidak sangat berguna untuk melakukan sesuatu. Hal ini diperlukan untuk memahami bagaimana untuk melintasi (melalui) linked list sebelum pergi lebih jauh.
Pikirkan kembali ke kereta. Mari kita bayangkan sebuah konduktor yang hanya bisa masuk kereta melalui mesin, dan dapat berjalan melalui kereta bawah garis sepanjang konektor terhubung ke mobil lain. Ini adalah bagaimana program akan melintasi linked list. Konduktor akan menjadi pointer ke node, dan terlebih dahulu akan menunjuk ke root, dan kemudian, jika pointer root ke simpul berikutnya menunjuk ke sesuatu, "konduktor" (bukan istilah teknis) akan diatur untuk menunjuk ke berikutnya node. Dengan cara ini, daftar dapat dilalui. Sekarang, asalkan ada pointer ke sesuatu, traversal akan terus berlanjut. Setelah mencapai pointer null (atau node dummy), yang berarti tidak ada lagi node (gerbong kereta) maka akan berada di akhir dari daftar, dan kemudian node baru dapat ditambahkan jika diinginkan.
Inilah yang yang terlihat seperti:


 
struct simpul {
  
int x;
  
simpul * berikutnya;
 
};

 
int main ()
 
{
  
simpul akar *, / / ​​ini tidak akan berubah, atau kita akan kehilangan daftar dalam memori
  
simpul * konduktor, / / ​​ini akan mengarah ke setiap node seperti melintasi daftar

  
akar simpul = baru; / / Set untuk benar-benar menunjuk ke sesuatu
  
akar-> next = 0; / / Kalau tidak, tidak akan bekerja dengan baik
  
akar-> x = 12;
  
konduktor = root, / / ​​poin Konduktor ke node pertama
  
if (konduktor = 0!) {
    
sementara (konduktor-> next! = 0)
      
konduktor = konduktor-> next;
  
}
  
konduktor-> next = node baru, / / ​​Membuat sebuah node pada akhir daftar
  
konduktor = konduktor-> berikutnya; / / Poin ke node yang
  
konduktor-> = next 0; / / Mencegah itu dari melanjutkan
  
konduktor-> x = 42;
 
}

Itu adalah kode dasar untuk melintasi daftar. Pernyataan jika memastikan bahwa ada sesuatu untuk memulai dengan (node ​​pertama). Dalam contoh itu akan selalu begitu, tetapi jika itu berubah, itu tidak mungkin benar. Jika pernyataan jika benar, maka tidak apa-apa untuk mencoba dan mengakses simpul yang ditunjuk oleh konduktor. While loop akan terus berlanjut selama ada satu pointer di akhirat. Konduktor hanya bergerak sepanjang. Ini perubahan apa yang menunjuk ke dengan mendapatkan alamat konduktor-> berikutnya.
Akhirnya, kode pada akhirnya dapat digunakan untuk menambahkan node baru sampai akhir. Setelah while loop sebagai selesai, kondektur akan menunjuk ke simpul terakhir dalam array. (Ingat konduktor kereta akan bergerak sampai ada yang beralih ke Ia bekerja dengan cara yang sama dalam loop sementara.?) Oleh karena itu, konduktor-> next diatur ke nol, sehingga tidak apa-apa untuk mengalokasikan daerah baru memori untuk itu untuk menunjuk ke. Kemudian konduktor melintasi satu elemen lebih (seperti konduktor kereta bergerak pada mobil baru ditambahkan) dan memastikan bahwa ia memiliki pointer untuk set berikutnya ke 0 sehingga daftar memiliki akhir. The 0 fungsi seperti periode, itu berarti tidak ada di luar lebih. Akhirnya, node baru memiliki set x nilainya. (Hal ini dapat diatur melalui input pengguna saya hanya menulis di '= 42' sebagai contoh..)
Untuk mencetak linked list, fungsi traversal hampir sama. Hal ini diperlukan untuk memastikan bahwa elemen terakhir dicetak setelah loop sementara berakhir.
Sebagai contoh:


 
konduktor = root;
 
if (konduktor = 0!) {/ / Memastikan ada tempat untuk memulai
  
sementara (konduktor-> next = 0!) {
    
cout << konduktor-> x;
    
konduktor = konduktor-> next;
  
}
  
cout << konduktor-> x;
 
}

Hasil akhir ini diperlukan karena loop sementara tidak akan berjalan setelah mencapai node terakhir, tetapi masih akan diperlukan untuk output isi dari node berikutnya. Akibatnya, output terakhir berkaitan dengan hal ini. Karena kita memiliki pointer ke awal daftar (akar), kita dapat menghindari redundansi ini dengan memungkinkan konduktor untuk berjalan off dari belakang kereta. Buruk bagi penyelenggara (jika itu adalah seseorang yang nyata), tetapi kode ini lebih sederhana karena juga memungkinkan kita untuk menghapus cek awal untuk null (jika akar adalah null, maka konduktor akan segera diatur ke nol dan loop tidak akan mulai ):


 
konduktor = root;
 
sementara (konduktor = NULL!) {
  
cout << konduktor-> x;
  
konduktor = konduktor-> next;
 
}
Share this article :

0 komentar:

Posting Komentar

Arsip Blog

Recent Post

Labels

  • A (6)
  • B (20)
  • C (20)
  • D (8)
  • E (2)
  • F (14)
  • G (1)
  • I (3)
  • J (6)
  • K (5)
  • L (1)
  • M (16)
  • N (4)
  • P (11)
  • Q (2)
  • R (2)
  • S (7)
  • T (9)
  • U (2)
  • V (11)
  • W (6)
.
 
Support : HONOR JANGAR | HONOR JANGAR INDONESIA | HONOR JANGAR
Copyright © 2013. Pak RT atau Pak RW - All Rights Reserved
Template Modify by Honor Jangar Indonesia
Proudly powered by Blogger