#include
void menara(int n, char awal, char akhir, char antara)
{
if( n==1 )
cout << "pindahkan 1 dari: "<< awal <<"ke "<< akhir << endl;
else{
menara(n-1, awal, antara, akhir);
cout << "pindahkan "<< n << " dari: "<< awal << "ke "<< akhir << endl;
menara(n-1, antara, akhir, awal);
}
}
void enter()
{
int i;
for(i=0;i<25;i++)
{
cout << endl;
}
}
void main()
{
int n;
enter();
cout << "Banyak piringan:? ";
cin >> n;
cin.clear();
cin.sync();
menara(n,'L','R','M');
cin.get();
}
Pengikut
About Me
Blog Archive
#include
int hitung;
int kali(int x,int y)
{
hitung = x * y ;
return(hitung);
}
void enter()
{
int i;
for(i=0;i<25;i++)
cout << endl;
}
void main() {
int mat1[4][4], mat2[4][4], mat3[4][4], i, j, k, nilai;
for(i = 0; i < 4; ++i) {
for(j = 0; j < 4; ++j) {
cout << "Matriks 1 baris ke "<< (i+1) << " kolom ke "<< (j+1) << " : ";
cin >> mat1[i][j];
cin.clear();
cin.sync();
}
}
cout<
for(j = 0; j < 4; j++) {
cout << "Matriks 2 baris ke "<< (i+1) << " kolom ke "<< (j+1) << " : ";
cin >> mat2[i][j];
cin.clear();
cin.sync();
}
}
enter();
cout << "Hasil Pengalian !"<
for(j = 0; j < 4; j++) {
for(k = 0, nilai = 0; k < 4; k++) {
nilai += kali(mat1[i][k] , mat2[k][j]);
}
mat3[i][j] = nilai;
cout.width(6);
cout << mat3[i][j];
}
cout <
cin.get();
}
Ada 3 konsep dasar pada Pemrograman BerOriantasi Objek, yaitu
- Encapsulation, yaitu dengan class
- Inheritance, yaitu dengan subclass
- Polymorphism, fungsi yang sama dalam class yang berbeda
Untuk itu kita akan kupas satu satu,
Encapsulation adalah pengelompokan data dan fungsi menjadi satu dalam sebuah class dan memilki batasana akses dengan default privat
Tujuan utama dari encapsulation adalah menyembunyika informasi (information hiding)
Bagaimana kita melakukan encapsulation?
Yaitu dengan membuat sebuah class. Sebuah class terdiri dari data (data member / property)dan fungsi(member function / method / operation / implementation / behaviour)
Beda class dan struct :
Struct hanya dapat menyimpan data / hanya menggabungkan data yang memiliki perbedaan type data, dan dapat diakses oleh semua fungsi (defaultnya public).
Ckass dapat menggabungkan data dan fungsi dan memiliki data yang idependen dan data nya dapat saling berhubungan. Dan memiliki fungsi masing masing, selain itu datanya nya juga tidak dapat diakses sembarang fungsi (defaultnya privat).
3 acces level data pada class:
- public : bagian class yang dapat diakses oleh umum, baik dari dalam maupun dari luar class(seperti stuct).
- protected : bagian class yang dapat diakses lingkunagn internal class dan class turunannya.
- private : bagian class yang hanya dapat diakses oleh lingkungan internal class itu sendiri.
Contoh :
Class product
{
Public : int no_brg;
Char nma_brg;
Float harga;
Int stok;
};
Product barang;//barang adalah class object
// kata public diatas adalah untuk memberi kan acces pada data dari class.
Cara mendeklarasikan sebuah object class:
Product product_objek; // objek biasa
Product product_array[10]; // objek array
Product *product_ptr; // objek pointer
Product &product_ref; // objek reference
Dalam sebuah class kita akan menemukan construktor dan destruktor.
Construktor adalah member function yang pertama kali dikerjakan ketika suatu objek di buat.
Dengan syarat :
- nama construktor harus sama dengan nama classnya, tapi diketik tampa ada return value).
- digunakan untuk inisialisasi objek, karena construktor adalah yang pertama kali di jalankan.
- Minimal ada 1 construktor dalam 1 class(bisa dibuat lebih/ di overload), jika tidak dibuat, compiler akan membuat sendiri secara default
- Dapat di berikan argumen
- Tidak memiliki return value
Destruktor adalah member function yang dikerjakan ketika 1 object di hancurkan (pengakhiran suatu objek)
Dengan syarat :
- Nama destruktor sama dengan nama classnya ditambah tanda tilde(~) didepannya
- Untuk de-inisialisasi / meng-clean up / dealokasi memory
- Hanya ada 1 destruktor
- Tidak memiliki argumen
- Tidak memiliki return value
Contoh:
Class time
{
Private : int hour;
int minute;
int second;
public : time(); //ini adalah construktor
void set_time(int,int,int);
void print_univ();
void print_biasa();
~time(); // ini adalah construktor
};
Cara mengakses member function yaitu deng amenggunakna operator (::)
Contoh:
Class time
{
Private : int hour;
int minute;
int second;
public : time();
{hour=minute=second=0;}
void set_time(int,int,int); // adalah sebuah prototype dari member function
void print_univ(); // adalah sebuah prototype dari member function
void print_biasa(); // adalah sebuah prototype dari member function
~time();
};
void Time :: set_time( int h, int m, int s )
{ hour = ( h >= 0 && h < 24 ) ? h : 0;
minute = ( m >= 0 && m < 60 ) ? m : 0;
second = ( s >= 0 && s < 60 ) ? s : 0;
}
void Time :: print_univ()
{ cout << setfill( '0' ) << setw( 2 ) << hour << ":"
<< setw( 2 ) << minute << ":"
<< setw( 2 ) << second;
}
void Time :: print_biasa()
{ cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 )
<< ":" << setfill( '0' ) << setw( 2 ) << minute
<< ":" << setw( 2 ) << second
<< ( hour < 12 ? " AM" : " PM" );
}
Sekian dulu tentang OO-nya. Tetep semangat y bljr pemrogramannya
^^
Struct adalah struktur data yang terdiri dari data data yang memiliki type dan nama yang berbeda yang menjadi grup dalam satu nama. Data data yang bergabung ini bernama data member.
cara deklarasi struct:
struct structure_name
{
Member_type1 member_name1;
Member_type2 member_name2;
Member_type3 member_name3;
Dst..
}object_names;
Dimana structure_name adalah nama untuk type struktur, object_name adalah identifier untuk structur ini.
Hal pertama yang kita harus ketahui adalah bahwa struktur data menciptakan tipe baru: Setelah struktur data dinyatakan, tipe baru dengan nama structure_name dibuat dan dapat digunakan di seluruh program seperti type lainnya,. Contoh:
Struct product
{
int weight;
float price;
};
product apel;
product banana, melon;
/*
dengan cara mendeklarasikan variable sebagai berikut :
Struct time
{
Int hour;
Int time;
Int second;
}
Struct time object; -> untuk mendeklarasikan variable biasa
Struct timearray[10]; -> untuk mendeklarasikan variable array
Struct *timeptr; -> untuk mendeklarasikan variable pointer
Struct &timeref; -> untuk mendeklarasikan variable reference
*/
kita memiliki structur pertama yang menyatakan jenis product yang memiliki 2 anggota, yaitu weight dan price, yang memiliki type yang berbeda. Lalu kita mendeklarasikan 3 object dengan type product itu.
Sekali menyatakan, product telah menjadi salah satu tipe data yang baru, seperti type data lainnya yaitu int, float, char atau short dan sejak saat itu kita dapat mendeklarasikan object (variable) dengna nama ini, seperti yang telah kita lakukan dengan apel, banana, dan melon.
Tepat di akhir deklarasi struct, dan sebelum titik koma, kita dapat menggunakan kolom opsional object_name untuk secara langsung menyatakan objek dari tipe struktur. Sebagai contoh, kita juga dapat mendeklarasikan objek struktur apel, pisang dan melon pada saat kita mendefinisikan tipe struktur data seperti ini:
produk struct (
int berat;
float harga;
) Apel, pisang, melon;
Penting untuk secara jelas membedakan antara nama type struktur data, dan obyek (variabel) yang memiliki jenis struktur ini. Kita bisa menginisialisasi banyak benda (yakni variabel, seperti apel, pisang dan melon) dari struktur satu jenis (produk).
Sekali kita telah menyatakan tiga objek dari suatu struktur (apel, pisang dan melon),kita dapat mengoperasi secara langsung para anggotanya. Untuk melakukan itu, kita menggunakan tanda titik ( . ) Disisipkan di antara nama objek dan nama anggota. Sebagai contoh, kita dapat beroperasi dengan salah satu dari unsur-unsur seolah-olah mereka variabel standar dari masing-masing jenis:
apple.weight
apple.price
banana.weight
banana.price
melon.weight
melon.price
Setiap salah satu dari ini memiliki tipe data yang sesuai kepada anggota mereka merujuk kepada: apple.weight, banana.weight dan melon.weight adalah tipe int, sementara apple.price, banana.price dan melon.price adalah tipe float.
Mari kita lihat sebuah contoh nyata di mana Anda dapat melihat bagaimana sebuah tipe struktur dapat digunakan dalam cara yang sama seperti tipe dasar:
// example about structures
#include
#include
#include
using namespace std;
struct movies_t {
string title;
int year;
} mine, yours;
void printmovie (movies_t movie);
int main ()
{
string mystr;
mine.title = "2001 A Space Odyssey";
mine.year = 1968;
)
Enter title: Alien
Enter year: 1979
My favorite movie is:
2001 A Space Odyssey (1968)
And yours is:
Alien (1979
Contoh ini menunjukkan bagaimana kita dapat menggunakan anggota dari sebuah objek sebagai variabel biasa. Sebagai contoh, anggota yang valid yours.year adalah variabel bertipe int, dan mine.title adalah variabel yang valid bertipe string.
object mine dan yours juga dapat diperlakukan sebagai variabel jenis movies_t yang valid, misalnya kita harus melewati mereka ke fungsi printmovie seperti yang kita akan lakukan dengan variabel biasa. Oleh karena itu, salah satu hal yang paling penting adalah struktur data yang kita dapat merujuk kepada anggota-anggota mereka secara individual atau kepada seluruh struktur sebagai sebuah blok dengan hanya satu pengenal.
Struktur data merupakan fitur yang dapat digunakan untuk mewakili database, terutama jika kita mempertimbangkan kemungkinan membangun array dari mereka:
// array of structures
#include
#include
#include
using namespace std;
#define N_MOVIES 3
struct movies_t {
string title;
int year;
} films [N_MOVIES];
void printmovie (movies_t movie);
int main ()
{
string mystr;
int n;
for (n=0; n
{
cout << "Enter title: ";
getline (cin,films[n].title);
cout << "Enter year: ";
getline (cin,mystr);
stringstream(mystr) >> films[n].year;
}
cout << "\nYou have entered these movies:\n";
for (n=0; n
printmovie (films[n]);
return 0;
}
void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year << ")\n";
}
Masukkan judul: Blade Runner
Masukkan tahun: 1982
Masukkan judul: Matrix
Masukkan tahun: 1999
Masukkan judul: Taxi Driver
Masukkan tahun: 1976
Anda telah memasukkan film-film ini:
Blade Runner (1982)
Matrix (1999)
Taxi Driver (1976)
Pointer ke struktur
Seperti jenis lain, struktur dapat ditunjukkan oleh pointer :
struct movies_t (
string title;
int year;
);
movies_t amovie;
movies_t * pmovie;
diman amovie adalah obyek dari tipe struktur movies_t, dan pmovie adalah sebuah pointer untuk menunjuk ke objek dari tipe struktur movies_t. Jadi, kode berikut juga akan berlaku:
pmovie = &amovie;
Nilai pointer pmovie akan ditugaskan untuk referensi ke objek amovie (alamatnya memori).
Sekarang kita akan melihat contoh lain yang mencakup pointer, yang akan mengenalkan sebuah operator baru, yaitu operator panah (->):
// pointers to structures
#include
#include
#include
using namespace std;
struct movies_t {
string title;
int year;
};
int main ()
{
string mystr;
movies_t amovie;
movies_t * pmovie;
pmovie = &amovie;
cout << "Enter title: ";
getline (cin, pmovie->title);
cout << "Enter year: ";
getline (cin, mystr);
(stringstream) mystr >> pmovie->year;
cout << "\nYou have entered:\n";
cout << pmovie->title;
cout << " (" << pmovie->year << ")\n";
return 0;
}
Masukkan judul: Invasi tubuh snatchers
Masukkan tahun: 1978
Anda telah memasukkan:
Invasi tubuh snatchers (1978)
Kode sebelumnya mengandung pengenalan penting: panah operator (->). Ini adalah dereference operator yang digunakan secara eksklusif dengan pointer ke objek dengan anggota. Operator ini berfungsi untuk mengakses anggota dari sebuah objek yang referensinya kita miliki. Dalam contoh kita gunakan:
pmovie-> title
Yang setara untuk semua tujuan untuk:
(* pmovie). judul
Kedua ungkapan pmovie-> title dan (* pmovie). title adalah sah dan keduanya berarti bahwa kita mengevaluasi anggota struktur data title yang ditunjuk oleh pointer yang disebut pmovie. Harus jelas dibedakan dari:
* pmovie.title
yang setara dengan:
* (pmovie.title)
dan itu akan mengakses nilai yang ditunjukna oleh anggota hipothetical pointer dari object struktur pmovie (yang dalam hal ini bukan pointer). Tabel berikut mengandung combinasi yang mungkin dari anggota struktur.
| Expression | What is evaluated | Equivalent |
| a.b | Member b of object a | |
| a->b | Member b of object pointed by a | (*a).b |
| *a.b | Value pointed by member b of object a | *(a.b) |
Nesting struktur (struct dalam struct)
Struktur juga dapat dimasukan kedalam struct lain, sehingga elemen yang berlaku juga bisa digunakan dalam struct yang lain.
struct movies_t {
string title;
int year;
};
struct friends_t {
string name;
string email;
movies_t favorite_movie;
} charlie, maria;
friends_t * pfriends = &charlie;
Setelah dideklarasikan sebelumnya kita bisa menggunakan salah satu istilah berikut:
charlie.name
maria.favorite_movie.title
charlie.favorite_movie.year
pfriends-> favorite_movie.year
(di mana, dengan cara, dua kalimat terakhir merujuk kepada anggota yang sama).
Typedef
Adalah salah satu cara untuk memberi julukna pada struct yang kita buat.
Contoh:
Typedef int hitung;
Hitung kode;
Kode = 88;
Typedef perusahaan pekerja[20];
Pekerja 5;
Sampai sekarang, program-program contoh bagian sebelumnya yang diberikan sangat sedikit interaksi dengan pengguna, jika ada sama sekali. Menggunakan standard input dan output perpustakaan, kita akan dapat berinteraksi dengan pengguna dengan mencetak pesan pada layar dan pengguna mendapatkan masukan dari keyboard.
C + + menggunakan abstraksi yang nyaman disebut aliran untuk melakukan operasi input dan output dalam sekuensial media seperti layar atau keyboard. Sebuah stream adalah sebuah objek di mana sebuah program dapat menyisipkan atau karakter ekstrak ke / dari itu. Kita tidak benar-benar perlu peduli tentang banyak spesifikasi tentang media fisik yang terkait dengan sungai - kita hanya perlu tahu akan menerima atau memberikan karakter secara berurutan.
Standar C + + perpustakaan termasuk file header iostream, di mana standar input dan output stream objek dideklarasikan.
Standar Output (cout)
Secara default, output standar dari sebuah program adalah layar, dan C + + sungai objek didefinisikan untuk mengakses itu adalah pengadilan.
cout yang digunakan bersama dengan operator penyisipan, yang ditulis sebagai <<(dua "kurang dari").
1 cout << "Output kalimat"; / / prints Output kalimat di layar
2 cout <<120; / / prints nomor 120 di layar
3 cout <
operator << memasukkan data ke stream yang sebelumnya. Dalam contoh di atas itu memasukkan string Output konstan kalimat, angka konstan 120 dan variabel x ke standard output stream cout. Perhatikan bahwa kalimat dalam instruksi pertama tertutup antara tanda kutip ganda (“ “) karena merupakan karakter string konstan. Setiap kali kita ingin menggunakan karakter string konstan kita harus menyertakan mereka di antara tanda kutip ganda (“ ") sehingga mereka dapat dengan jelas dibedakan dari variabel nama. Sebagai contoh, kedua kalimat memiliki hasil yang sangat berbeda:
1 cout << "Halo"; / / prints Hello
2 cout <
Penyisipan operator (<<) dapat digunakan lebih dari sekali dalam satu pernyataan:
cout << "Halo," << "I am" << "a C + + pernyataan";
Pernyataan terakhir ini akan mencetak pesan Hello, I am a C + + pernyataan di layar. Kegunaan mengulangi penyisipan operator (<<) adalah menunjukkan ketika kita ingin mencetak kombinasi dari variabel dan konstanta atau lebih dari satu variabel:
cout << "Hello, I am" <
Jika kita mengasumsikan variabel usia berisi nilai 24 dan variabel pos berisi 90.064 output dari pernyataan sebelumnya akan menjadi:
Halo, saya 24 tahun dan saya adalah 90.064 kodepos
Penting untuk memperhatikan bahwa cout tidak menambahkan satu baris setelah output kecuali jika kita secara eksplisit menunjukkan hal itu, oleh karena itu, pernyataan berikut:
1 cout << "Ini adalah sebuah kalimat.";
2 cout << "Ini adalah kalimat yang lain.";
akan ditampilkan pada layar satu mengikuti garis lain tanpa istirahat di antara mereka:
Ini adalah sebuah kalimat. Ini adalah kalimat yang lain.
meskipun kita telah menuliskannya dalam dua cout yang berbeda. Dalam rangka untuk melakukan satu baris pada output kita harus secara eksplisit memasukkan karakter baris baru ke pengadilan. Dalam C + + sebuah karakter baris baru dapat ditetapkan sebagai \ n (backslash, n):
1 cout << "Pertama kalimat. \ n";
2 cout << "Kedua kalimat. \ nThird kalimat.";
Ini menghasilkan output sebagai berikut:
Kalimat pertama.
Kedua kalimat.
Kalimat ketiga.
Selain itu, untuk menambahkan baris baru, Anda dapat juga menggunakan manipulator endl. Contoh:
1 cout << "Pertama kalimat." <
akan mencetak:
kalimat pertama.
kalimat kedua.
Para manipulator endl menghasilkan karakter newline, persis seperti masuknya '\ n' tidak, tetapi juga memiliki perilaku tambahan bila digunakan dengan buffered stream. lagi pula, cout akan menjadi unbuffered stream dalam kebanyakan kasus, sehingga Anda dapat umumnya menggunakan baik \ n melarikan diri karakter dan manipulator endl dalam rangka untuk menentukan baris baru tanpa perbedaan dalam perilaku.
Standard Input (cin).
Perangkat input standar biasanya keyboard. Menangani standard input di C + + ini dilakukan dengan menerapkan operator overload ekstraksi (>>) pada cin stream. Operator harus diikuti oleh variabel yang akan menyimpan data yang akan diambil dari stream. Contoh:
1 int umur
2 cin>> umur;
Pernyataan pertama menyatakan tipe variabel int disebut umur, dan yang kedua menunggu input dari cin (keyboard) untuk menyimpannya dalam variabel integer ini.
cin hanya dapat memproses input dari keyboard sekali tombol RETURN telah ditekan. Oleh karena itu, bahkan jika Anda meminta satu karakter, ekstraksi dari cin tidak akan memproses input sampai user menekan RETURN setelah karakter telah diperkenalkan.
Anda harus selalu mempertimbangkan jenis variabel yang Anda gunakan sebagai wadah dengan cin ekstraksi. Jika Anda meminta sebuah integer Anda akan mendapatkan sebuah integer, jika Anda meminta karakter Anda akan mendapatkan karakter dan jika Anda meminta string karakter Anda akan mendapatkan sebuah string karakter.
1 / / I / o contoh
2
3 # include
4 using namespace std;
5
6 int main ()
7 (
8 int i;
9 cout << "Masukkan nilai integer:";
10 cin>> i;
11 cout << "Nilai yang Anda masukkan adalah" <12 cout << "dan 2 kalinhya adalah" <13 return 0;
14 )
Harap masukkan nilai integer: 702
Nilai yang Anda masukkan adalah 702 dan ganda adalah 1404.
Pengguna dari suatu program dapat menjadi salah satu faktor yang menghasilkan kesalahan bahkan dalam program-program sederhana yang menggunakan cin (seperti yang kita lihat). Karena jika Anda meminta nilai integer dan memperkenalkan sebuah nama pengguna (yang umumnya adalah string karakter), hasilnya dapat menyebabkan program Anda untuk misoperate karena tidak apa yang kami harapkan dari pengguna. Jadi bila Anda menggunakan input data yang diberikan oleh ekstraksi cin Anda harus percaya bahwa pengguna program Anda akan bersikap kooperatif dan bahwa dia tidak akan memperkenalkan namanya atau yang serupa ketika nilai integer diminta. Sedikit ke depan, ketika kita melihat kelas stringstream kita akan melihat kemungkinan solusi untuk kesalahan yang dapat disebabkan oleh jenis ini input pengguna.
Anda juga dapat menggunakan cin untuk meminta lebih dari satu datum input dari user:
cin>> a>> b;
adalah setara dengan:
1 cin>> a;
2 cin>> b;
Dalam kedua kasus, pengguna harus memberi dua data, satu untuk variabel a dan lainnya untuk variabel b yang mungkin dipisahkan oleh pemisah kosong yang valid: spasi, karakter tab atau baris baru.
cin dan string
Kita dapat menggunakan cin untuk mendapatkan ekstraksi string dengan operator (>>) seperti yang kita lakukan dengan variabel tipe data dasar:
cin>> mystring;
Namun, seperti telah dikatakan, cin ekstraksi segera berhenti membaca seakan-akan menemukan ruang kosong karakter apapun, sehingga dalam kasus ini kita akan bisa mendapatkan hanya satu kata untuk setiap ekstraksi. Perilaku ini mungkin atau mungkin tidak dapat apa yang kita inginkan, misalnya jika kita ingin mendapatkan sebuah kalimat dari pengguna, operasi ekstraksi ini tidak akan berguna.
Dalam rangka untuk mendapatkan seluruh baris, kita dapat menggunakan fungsi getline, yang merupakan cara yang lebih dianjurkan untuk mendapatkan input pengguna dengan cin:
1 / / Cin dengan rangkaian
2 # include
3 # include
4 using namespace std;
5
6 int main ()
7 (
8 mystr string;
9 cout << "Siapa nama Anda?";
10 getline (cin, mystr);
11 cout << "Halo" <
13 getline (cin, mystr);
14 cout << "Aku suka" <
16 )
What's your name? Juan Souli
Halo Juan Souli.
Apa tim favorit Anda? The Isotop
Aku suka The Isotop juga!
Perhatikan bagaimana dalam kedua panggilan untuk getline kita menggunakan string yang sama identifier (mystr). Apa program dilakukan dalam panggilan kedua adalah dengan mengganti konten sebelumnya dengan yang baru yang diperkenalkan.
stringstream
File header standar
1 string mystr ( "1204");
2 int Myint;
3 stringstream (mystr)>> Myint;
Ini menyatakan sebuah objek string dengan nilai "1204", dan sebuah objek int. Kemudian kita menggunakan stringstream's konstruktor untuk membangun sebuah objek dari jenis ini dari objek string. Karena kita dapat menggunakan benda-benda stringstream seolah-olah mereka sungai-sungai, kita dapat mengekstrak integer dari itu seperti yang kita akan dilakukan pada cin dengan menerapkan extractor operator (>>) itu diikuti oleh variabel bertipe int.
Setelah potongan kode ini, variabel Myint akan berisi nilai numerik 1204.
1/ / Stringstreams
2# include
3# include
4# include
5using namespace std;
6
7int main ()
8(
9 mystr string;
10 float harga = 0;
11 int jumlah = 0;
12
13 cout << "Enter price:";
14 getline (cin, mystr);
15 stringstream (mystr)>> harga;
16 cout << "Masukkan jumlah:";
17 getline (cin, mystr);
18 stringstream (mystr)>> kuantitas;
19 cout << "Total price:" <
21)
Masukkan harga: 22,25
Masukkan kuantitas: 7
Total harga: 155,75
Dalam contoh ini, kita mendapatkan nilai numerik dari input standar secara tidak langsung. Alih-alih nilai numerik untuk penggalian langsung dari input standar, kita mendapatkan baris dari input standar (cin) menjadi obyek string (mystr), dan kemudian kita mengekstrak nilai-nilai integer dari string ini ke dalam variabel bertipe int (kuantitas).
Menggunakan metode ini, bukan ekstraksi langsung dari nilai-nilai integer, kita memiliki lebih banyak kontrol terhadap apa yang terjadi dengan nilai numerik input dari user, karena kita memisahkan proses untuk mendapatkan masukan dari pengguna (sekarang kita hanya meminta baris) dengan penafsiran yang input. Oleh karena itu, metode ini biasanya lebih suka untuk mendapatkan nilai numerik dari pengguna dalam semua program yang intensif di input pengguna.
Manipulasi dari cin akan saya tambah pada post berikutnya
C + + juga menyediakan kelas-kelas berikut untuk melakukan output dan input karakter ke / dari file:
• ofstream: Stream kelas untuk menulis pada file
• ifstream: Stream kelas untuk membaca dari file
• fstream: Stream kelas untuk kedua membaca dan menulis dari / ke file.
Kelas-kelas ini diperoleh secara langsung atau tidak langsung dari kelas istream, dan ostream. Kita telah menggunakan kelas2 ini : cin adalah obyek kelas istream dan cout adalah obyek kelas ostream.
Mari kita lihat sebuah contoh:
1 / / dasar operasi file
2 # include
3 # include
4 using namespace std;
5
6 int main () (
7 ofstream myfile;
8 myfile.open ( "example.txt");
9 myfile << "Menulis ini ke file. \ n";
10 myfile.close ();
11 return 0;
12 ) [File example.txt]
13 Menulis ke file ini
Kode ini menciptakan sebuah file yang bernama example.txt dan menyisipkan kalimat ke dalamnya dengan cara yang sama yang biasa kami lakukan dengan cout, tetapi penggunaan file myfile stream sebagai gantinya.
Tapi mari kita lihat langkah demi langkah:
Membuka file
Operasi pertama umumnya dilakukan pada objek dari salah satu kelas-kelas ini adalah untuk menghubungkan ke file yang sebenarnya. Prosedur ini dikenal sebagai untuk membuka file. File terbuka direpresentasikan dalam sebuah program oleh objek stream (sebuah Instansiasi dari salah satu kelas tersebut, dalam contoh sebelumnya ini myfile) dan setiap input atau output operasi yang dilakukan pada objek sungai ini akan diterapkan ke file fisik yang diasosiasikan dengan hal itu .
Untuk membuka file dengan objek sungai kita menggunakan fungsi open ():
open (filename, mode);
Dimana nama file adalah karakter null diakhiri urutan const char * tipe (jenis yang sama yang telah string literal) yang mewakili nama file yang akan terbuka, dan modus adalah parameter opsional dengan kombinasi flag-flag berikut:
ios::in ->buka file untuk masukan operasi.
ios::out ->buka file untuk operasi output.
ios::binary -> Buka dalam modus biner.
ios::ate ->Atur posisi awal pada EOF, Jika flag ini tidak diatur ke nilai apapun, posisi awal adalah awal file.
ios:: app ->Semua output operasi dilakukan pada akhir file, menambahkan konten saat ini isi dari file. flag ini hanya dapat digunakan di stream yang terbuka hanya untuk operasi keluaran saja.
ios:: trunc ->Jika file dibuka untuk operasi output yang sudah ada sebelumnya, isi sebelumnya akan dihapus dan diganti dengan yang baru.
Semua flag ini dapat dikombinasikan dengan menggunakan operator bitwise OR (|). Sebagai contoh, jika kita ingin membuka file biner example.bin dalam mode untuk menambahkan data kita bisa melakukannya dengan panggilan berikut untuk fungsi open ():
1 ofstream myfile;
2 myfile.open ( "example.bin", ios:: out | ios:: app | ios:: binary);
Setiap salah fungsi dari fungsi open () adalah anggota kelas ofstream, ifstream dan fstream memiliki modus default yang digunakan jika file dibuka tanpa argumen kedua:
kelas modus default parameter
ofstream : ios:: out
ifstream : ios:: in
fstream : ios:: in | ios:: out
.
Nilai standarnya adalah diterapkan jika fungsi dipanggil tanpa menentukan nilai setiap parameter. Jika fungsi ini dideklarasikan dengan nilai parameter, modus default diganti dan tidak digabungkan.
Stream file dibuka pada modus biner melakukan, operasi input dan output secara independen dari pertimbangan format apapun. File non-biner dikenal sebagai file teks, dan beberapa terjemahan mungkin terjadi karena format dari beberapa karakter khusus (seperti newline dan carriage return karakter).
Karena tugas yang pertama umumnya dilakukan pada file objek stream untuk membuka file, ini mencakup tiga kelas konstruktor panggilan yang secara otomatis anggota open() memiliki fungsi dan parameter yang persis sama seperti anggota ini. Oleh karena itu, kita bisa juga telah menyatakan myfile sebelumnya dilakukan objek dan operasi pembukaan yang sama dalam contoh kita sebelumnya dengan menulis:
ofstream myfile ( "example.bin", ios:: out | ios:: app | ios:: binary);
Menggabungkan objek konstruksi dan pembukaan stream dalam satu pernyataan. Kedua bentuk untuk membuka file yang valid dan setara.
Untuk memeriksa apakah stream file berhasil membuka sebuah file, Anda dapat melakukannya dengan memanggil is_open (). Anggota ini berfungsi mengembalikan nilai bool benar dalam kasus yang memang objek stream dikaitkan dengan membuka file,atausebaliknya:
if (myfile.is_open ()) (/ * ok, lanjutkan dengan output * /)
Menutup file
Ketika kita sudah selesai dengan operasi input dan output pada sebuah file kita akan menutupnya sehingga file menjadi tersedia lagi. Untuk melakukan itu kita harus memanggil fungsi anggota sungai close (). Anggota ini tidak memerlukan parameter fungsi, dan apa yang dilakukannya adalah untuk flush buffer terkait dan menutup file:
myfile.close ();
Sekali fungsi member ini disebut, objek stream dapat digunakan untuk membuka file lain, dan file yang tersedia lagi untuk dapat dibuka oleh proses lainnya.
jika suatu objek hancur dan masih berhubungan dengan file yang terbuka, maka secara otomatis akan memanggil fungsi penghancur, sebagai anggota dr fungsi close().
File teks
Stream file teks tidak termasuk dalam fungsi open() ios:: binary. File-file ini dirancang untuk menyimpan teks dan dengan demikian semua nilai yang kita input atau output dari / kepada mereka dapat mengalami beberapa perubahan format, yang tidak selalu sesuai dengan nilai biner harfiah mereka.
Output data operasi pada file teks dilakukan dengan cara yang sama kita beroperasi dengan pengadilan:
1/ / menulis di sebuah file teks
2# include
3# include
4using namespace std;
5
6int main () (
7 ofstream myfile ( "example.txt");
8 if (myfile.is_open ())
9 (
10 myfile << "Ini adalah garis. \ n";
11 myfile << "Ini adalah baris lain. \ n";
12 myfile.close ();
13 )
14 else cout << "Tidak dapat membuka file";
15 return 0;
16 )
[File example.txt]
Ini adalah baris.
Ini adalah baris lain.
Input data dari sebuah file dapat juga dilakukan dengan cara yang sama yang kita lakukan dengan cin:
1 / / membaca file teks
2 # include
3 # include
4 # include
5 using namespace std;
6
7 int main () (
8 string baris;
9 ifstream myfile ( "example.txt");
10 if (myfile.is_open ())
11 (
12 while (! myfile.eof ())
13 (
14 getline (myfile, line);
15 cout <
17 myfile.close ();
18 )
19
20 else cout << "Tidak dapat membuka file";
21
22 return 0;
23 )
Ini adalah baris.
Ini adalah baris lain.
Contoh terakhir ini membaca sebuah berkas teks dan mencetak keluar isinya di layar. Perhatikan bagaimana kita telah menggunakan fungsi anggota baru, yang disebut eof () yang mengembalikan nilai true dalam kasus bahwa akhir file telah tercapai. Kami telah menciptakan sebuah sementara loop yang selesai ketika memang myfile.eof () menjadi benar (yaitu, akhir dari file telah tercapai).
Memeriksa status flag
Selain eof (), yang memeriksa apakah akhir file telah tercapai, ada fungsi anggota lain untuk memeriksa keadaan suatu aliran (semua dari mereka mengembalikan nilai bool):
bad ()
Mengembalikan nilai true jika suatu operasi membaca atau menulis gagal. Sebagai contoh dalam kasus bahwa kami mencoba untuk menulis ke sebuah file yang tidak terbuka, atau untuk menulis dimana tidak mempunyai ruang tersisa untuk ditulisi.
fail ()
Mengembalikan nilai true dalam kasus yang sama dengan bad (), tetapi juga dalam kasus yang terjadi kesalahan format, seperti ketika sebuah karakter alfabet diekstrak ketika kita mencoba membaca sebuah integer nomor.
eof ()
Mengembalikan nilai true jika file yang terbuka untuk membaca telah mencapai akhir.
good ()
Ini adalah status flag yang paling generik, dan mengembalikan nilai false dalam kasus yang sama yang memanggil salah satu fungsi sebelumnya akan kembali benar.
Dalam rangka menreset status flag, kita dapat mengeceknya dengan menggunakan fungsi clear(),yang tidak menggunakna parameter.
Diambil dari cplusplus.com
