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;

0 komentar:
Posting Komentar