Your SlideShare is downloading. ×
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Pointer c++
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Pointer c++

1,904

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,904
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 44 dari 776. PointerObyektif Praktikum :• Mengerti konsep dasar apa itu pointer dan penggunaannya• Mengerti apa itu Reference dan hubungannya dengan pointer• Mengerti dan dapat menggunakan pointer pada C++• Mengetahui hubungan antara pointer dan memoryVariabel merupakan suatu nilai yang disimpan dalam memory yang dapat diakses denganidentifier. Variabel ini sesunggunhnya disimpan pada suatu alamat didalam memory. Dimanasetiap alamat memory akan berbeda dengan yang lainnya (unik).PengantarKetika suatu variable dideklarasikan , ada 3 hal yang dapat diassosiasikan yaitu: nama,type data dan alamat pada memori. Contohnya deklarasiInt n;Berdasarkan pendeklarasian diatas, n adalah nama variable dengan type data integer yangbiasa ditulis Int ,dan alamat tempat alokasi memori untuk n akan disimpanDengan alamat memory dengan notasi hexadecimal seperti 0x8fd4fff4 yang dapatdigambarkan sbb :0x8fd4fff4nintkotak pada gambar mewakili tempat penyimpanan variabel yang berada di memory, namavariabel berada disebelah kiri kotak, alamat variabel terdapat diatas kotak, dan jenis tipedata berada dibawahnya sedangkan apabila diketahui nilai variabel tersebut maka akanterdapat didalam kotak.0x8fd4fff4nint33
  • 2. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 45 dari 77suatu nilai variabel dapat diakses melalui nama variabelnya, sebagai contoh kita dapatmengetahui nilai variabel dengan menuliskan statement cout << n;dan untuk mengakses suatu alamat suatu variabel dapat digunakan operator alamat & ,sebagai contoh kita dapat mengetahui alamat variable pada memori dengan statement cout<< &n;contoh program mencetak nilai pointer#include <iostream.h>#include <conio.h>main(){int n = 33;cout << "n = " << n << endl; // mencetak nilai ncout << "&n = " << &n << endl; // mencetak alamat ngetch();return 0;}Dengan output seperti :n = 33&n = 0x8fd4fff4Dapat disimpulkan bahwa nama variabel menunjukkan nilai suatu variabel secara lagsungsedangkan suatu pointer menunjukkan atau mengarahkan suatu nilai dengan tidak langsungyaitu dengan cara mereferensikannya.1. ReferenceSuatu Reference atau referensi adalah suatu alias atau dapat dikatakan sebagai nama lainsebagai petunjuk dari nama sebenarnya (sinonim). Reference dapat dideklarasikanmenggunakan sintaks :Tipe& nama-ref = nama-var;Dimana tipe& adalah tipe data, nama-ref adalah nama referensi, dan nama-var adalah namavariabel. Sebagai contoh , pendeklarasian referenceint& rn=n; // rn adalah sinonim untuk n
  • 3. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 46 dari 77Contoh menggunakan Reference 1#include <iostream.h>#include <conio.h>main(){int n = 33;int& rn = n; // rn adalah reference untuk ncout << "n = " << n << ", rn = " << rn << endl;--n;cout << "n = " << n << ", rn = " << rn << endl;rn *= 2;cout << "n = " << n << ", rn = " << rn << endl;getch();return 0;}Pada deklarasi r dan rn adalah nama berbeda untuk suatu variabel yang sama; r dan rnmemiliki nilai variabel yang sama. Seperti konstanta, reference harus diinisialisasi ketikadideklarasikan dan diinisialisasikan dengan variable bukan literal.int& rn=33; // ERROR: 33 is not a variable!Ada beberapa compiler yang memperbolehkan pendeklarasian dengan literal, tetapi akan tetapmuncul warning mengenai temporary variable yang harus dibuat untuk mengalokasikanmemory yang dimana dapat dipanggil reference rn.Meskipun reference harus diinisialisasikan pada variable, refernce bukan variable.Variable adalah suatu objekReference adalah variable yang tidak terpisah karena akan mengarah pada satu nilai dan satualamat.
  • 4. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 47 dari 77Contoh menggunakan Reference 2#include <iostream.h>#include <conio.h>main(){clrscr();int n = 33;int& rn=n; // r adalah sinonim untuk ncout << "&n = " << &n << ", &rn = " << &rn << endl;int& rn2=n; // r adalah sinonim yg lain utk nint& rn3=rn; // r adalah sinonim lain utk ncout << "&rn2 = " << &rn2 << ", &rn3 = " << &rn3 << endl;getch();return 0;}Output :&n = 0x8fb8fff4, &rn = 0x8fb8fff4&rn2 = 0x8fb8fff4, &rn3 = 0x8fb8fff4Pada baris pertama output menunjukkan bahwa n dan rn memiliki alamat yang sama yaitu0x8fb8fff4 dengan nama yang berbeda untuk satu objek. Sedangkan pada baris keduaoutput menunjukkan bahwa reference tersebut mengarah atau mereferensi pada suatu objek,pada program ini hanya terdapat satu objek yaitu yang terdapat pada alamat 0x8fb8fff4,kesimpulannya reference rn, rn2, rn3 mengarah ke objek yang sama.0x8fb8fff4nintrn rn2 rn333
  • 5. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 48 dari 77pada C++, operator reference & digunakan untuk 2 tujuan yang khusus :1. ketika diterapkan sebagai prefix atau awalan dari nama suatu objek2. ketika diterapkan sebagai suffix atau akhiran pada suatu type T, yang menunjukkantype yang “ mengarah ke T “, sebagai contoh, int& adalah type yang “mengarah keint”, pada contoh reference 2 n dideklarasikan mempunyai tipe data int, dan rndideklarasikan untuk memiliki type reference int.C++ memiliki 5 type derived, ketika T adalah type maka1. const T adalah type derived “ constant T ”2. T() adalah type derived “ function returning T “3. T[] adalah type derived “ array of T “4. T& adalah type derived “ reference to T “5. T* adalah type derived “ Pointer to T “POINTEROperator reference & mengembalikan alamat memory dari suatu variable ketika digunakan.Kita juga dapat menyimpan suatu alamat pada suatu variable lain. Type dari variable yangdapat menyimpan suatu alamat disebut Pointer. Variabel pointer harus mendapatkan type “pointer to T “ , dimana T adalah type dari objek dimana pointer itu ditunjuk. Seperti yangsudah dijelaskan pada akhir penjelasan reference bahwa “pointer to T” disimbolkan denganT* , sebagai contoh bahwa suatu alamat dari variable dengan tipe int dapat disimpan dalamvariabel pointer dengan tipe int*.
  • 6. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 49 dari 77Menggunakan pointer variabel#include <iostream.h>#include <conio.h>main(){clrscr();int n = 33;cout << " n = " << n << ", &n = " << &n << endl;int* pn=&n; // pn memegang alamat ncout << " pn = " << pn << endl;cout << " &pn = " << &pn << endl;getch();return 0;}Output :n = 33, &n = 0x8fbafff4pn = 0x8fbafff4&pn = 0x8fbafff2Dapat digambarkan sbb :0x8fbafff4 0x8fbafff2n pnInt int*Variabel n dideklarasi dengan angka 33 , dengan alamat 0x8fbafff4. variable pn dideklarasisama dengan &n yang merupakan alamat dari n, jadi nilai dari pn adalah 0x8fbafff4 , tetapi pnadalah objek yang berbeda yang memiliki nilai alamat dari n , dikatakan berbeda karena pnmemiliki alamat berbeda yaitu 0x8fbafff2.0x8fbafff433
  • 7. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 50 dari 77nintpnint *variabel pn disebut “pointer” karena bernilai “points” atau alamat dari lokasi nilai yang lain.Nilai dari pointer tsb adalah suatu alamat. Alamat tersebut tergantung pada computer dimanaprogram itu berjalan. Dengan gambar diatas dapat pula dijelaskan bahwa 2 variable n dan pndimana pn adalah pointer dari n dan n memiliki nilai 33. pointer dapat dikatakan juga sebagai“locator” : yang mengalokasikan objek lain melalui alamat.Operator Alamat (Address operator (&))Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnyapada memory, hal ini akan dilakukan secara otomatis oleh kompilerdan operating sysem padasaat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukandengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of".Contoh:ted = &andy;Akan memberikan variable ted alamat dari variable andy, karena variable andy diberi awalankarakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory,bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksisbb :andy = 25;fred = andy;ted = &andy;Maka hasilnya:33
  • 8. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 51 dari 77Operator Reference (*)Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsungdengan memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "valuepointed by". Contoh :beth = *ted;(dapat dikatakan:"beth sama dengan nilai yang ditunjuk oleh ted") beth = 25, karena teddialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25.Ekspresi dibawah ini semuanya benar, perhatikan :andy == 25&andy == 1776ted == 1776*ted == 25Ekspresi pertama merupakan assignation bahwa andy=25;. Kedua, menggunakan operatoralamat (address/derefence operator (&)), sehingga akan mengembalikan alamat dari variabelandy. Ketiga bernilai benar karena assignation untuk ted adalah ted = &andy;. Keempatmenggunakan reference operator (*) yang berarti nilai yang ada pada alamat yang ditunjukoleh ted, yaitu 25. Maka ekspresi dibawah ini pun akan bernilai benar :*ted == andyDeklarasi variable bertipe pointerFormat deklarasi pointer :type * pointer_name;Dimana type merupakan tipe dari data yang ditunjuk, bukan tipe dari pointer-nya. Contoh :int * number;char * character;float * greatnumber;
  • 9. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 52 dari 77Contoh :// my first pointer#include <iostream.h>int main (){ int value1 = 5, value2 = 15;int * mypointer;mypointer = &value1;*mypointer = 10;mypointer = &value2;*mypointer = 20;cout << "value1==" << value1 << "/ value2==" << value2;return 0;}Output :value1==10 / value2==20Perhatikan bagaimana nilai dari value1 dan value2 diubah secara tidak langsung. Pertamamypointer diberikan alamat value1 dengan menggunakan tanda ampersand (&). Kemudianmemberikan nilai 10 ke nilai yang ditunjuk oleh mypointer, yaitu alamat dari value1, makasecara tidak langsung value1 telah dimodifikasi. Begitu pula untuk value2.Contoh :// more pointers#include <iostream.h>int main (){int value1 = 5, value2 = 15;int *p1, *p2;p1 = &value1; // p1 = address of value1p2 = &value2; // p2 = address of value2*p1 = 10; // value pointed by p1 = 10*p2 = *p1; // value pointed by p2 = value pointed by p1p1 = p2; // p1 = p2 (value of pointer copied)*p1 = 20; // value pointed by p1 = 20cout << "value1==" << value1 << "/ value2==" << value2;return 0;}Output :value1==10 / value2==20
  • 10. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 53 dari 77Array dan PointerIdentifier suatu array equivalen dengan alamat dari elemen pertama, pointer equivalendengan alamat elemen pertama yang ditunjuk. Perhatikan deklarasi berikut:int numbers [20];int * p;maka deklarasi dibawah ini juga benar :p = numbers;p dan numbers equivalen, dan memiliki sifat (properties) yang sama. Perbedaannya, userdapat menentukan nilai lain untuk pointer p dimana numbers akan selalu menunjuk nilaiyang sama seperti yang telah didefinisikan. p, merupakan variable pointer, numbers adalahconstant pointer. Karena itu walaupun instruksi diatas benar, tetapi tidak untuk instruksidibawah ini :numbers = p;karena numbers adalah array (constant pointer), dan tidak ada nilai yang dapat diberikanuntuk identifier konstant (constant identifiers).Contoh : Output :// more pointers 10, 20, 30, 40, 50,#include <iostream.h>int main (){int numbers[5];int * p;p = numbers; *p = 10;p++; *p = 20;p = &numbers[2]; *p = 30;p = numbers + 3; *p = 40;p = numbers; *(p+4) = 50;for (int n=0; n<5; n++)cout << numbers[n] << ", ";return 0;}Inisialisasi PointerContoh:int number;int *tommy = &number;Equivalen dengan :int number;int *tommy;tommy = &number;
  • 11. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 54 dari 77Seperti pada array, inisialisasi isi dari pointer dapat dilakukan dengan deklarasi seperti contohberikut :char * terry = "hello";Misalkan "hello" disimpan pada alamat 1702 dan seterusnya, maka deklarasi tadi dapatdigambarkan sbb :terry berisi nilai 1702 dan bukan h atau "hello", walaupun 1702 menunjuk pada karaktertersebut. Sehingga jika akan dilakukan perubahan pada karakter o diganti dengan tanda !maka ekspresi yang digunakan ada 2 macam :terry[4] = !;*(terry+4) = !;Penulisan terry[4] dan *(terry+4), mempunyai arti yang sama. Jika digambarkan :Pointer ArithmatikaContoh, char memerlukan 1 byte, short memerlukan 2 bytes dan long memerlukan 4.Terdapat 3 buah pointer :char *mychar;short *myshort;long *mylong;ekspresi diatas akan menunjuk pada lokasi dimemory masing-masing 1000, 2000 and 3000,sehingga jika dituliskan :mychar++;myshort++;mylong++;mychar, akan bernilai 1001, myshort bernilai 2002, dan mylong bernilai 3004. Alasannyaadalah ketika terjadi pertambahan maka akan ditambahkan dengan tipe yang sama sepertiyang didefinisikan berupa ukuran dalam bytes.
  • 12. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 55 dari 77Perhatikan ekspresi dibawah ini :*p++;*p++ = *q++;Ekspresi pertama equivalen dengan *(p++) dan yang dilakukan adalah menambahkan p (yaitualamat yang ditunjuk, bukan nilai yang dikandungnya).Ekspresi kedua, yang dilakukan pertama adalah memberikan nilai *q ke *p dan kemudiankeduanya ditambahkan 1 atau dengan kata lain :*p = *q;p++;q++;void pointerTipe pointer void merupakan tipe khusus. void pointers dapat menunjuk pada tipe dataapapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalahtidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui,sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai voidpointer ketipe data sebenarnya.Contoh :// integer increaser#include <iostream.h>void increase (void* data, int type){switch (type){case sizeof(char) : (*((char*)data))++; break;case sizeof(short): (*((short*)data))++; break;case sizeof(long) : (*((long*)data))++; break;}}int main (){char a = 5;short b = 9;long c = 12;
  • 13. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 56 dari 77increase (&a,sizeof(a));increase (&b,sizeof(b));increase (&c,sizeof(c));cout << (int) a << ", " << b << ", " << c;return 0;}Output :6, 10, 13Pointer untuk functionsC++ memperbolehkan operasi dengan pointer pada function. Kegunaan yang utama adalahuntuk memberikan satu function sebagai parameter untuk function lainnya. Deklarasi pointeruntuk function sama seperti prototype function kecuali nama function dituliskan diantaratanda kurung () dan operator asterisk (*) diberikan sebelum nama.Contoh :// pointer to functions#include <iostream.h>int addition (int a, int b){ return (a+b); }int subtraction (int a, int b){ return (a-b); }int (*minus)(int,int) = subtraction;int operation (int x, int y, int (*functocall)(int,int)){int g;g = (*functocall)(x,y);return (g);}int main (){int m,n;m = operation (7, 5, addition);n = operation (20, m, minus);cout <<n;return 0;}Output :8
  • 14. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 57 dari 77Dari contoh diatas, minus merupakan pointer global untuk function yang mempunyai 2parameters bertipe int, kemudian diberikan untuk menunjuk function subtraction, ditulisdalam satu baris instruksi :int (* minus)(int,int) = subtraction;StructuresData structuresStruktur data merupakan kumpulan berbagai tipe data yang memiliki ukuran yang berbeda dikelompokan dalam satu deklarasi unik, dengan format sbb :struct model_name {type1 element1;type2 element2;type3 element3;..} object_name;dimana model_name adalah nama untuk model tipe stukturnya dan parameter optionalobject_name merupakan identifier yang valid untuk objek sturktur. Diantara kurung kurawal{ } berupa tipe dan sub-identifier yang mengacu ke elemen pembentuk struktur. Jikapendefinisian stuktur menyertakan parameter model_name (optional), maka parametertersebut akan menjadi nama tipe yang valid ekuivalen dengan struktur. Contoh :struct products {char name [30];float price;} ;products apple;products orange, melon;Didefinisikan model struktur products dengan dua field : name dan price, dengantipe yang berbeda. Kemudian tipe struktur tadi (products) digunakan untuk mendeklarasikantiga objek : apple, orange dan melon.Ketika dideklarasikan, products menjadi tnama tipe yang valid seperti tipe dasar int,char atau short dan dapat mendeklarasikan objects (variables) dari tipe tersebut. Optionalfield yaitu object_name dapat dituliskan pada akhir deklarasi struktur untuk secara langsungmendeklarasikan object dari tipe struktur. Contoh :struct products {char name [30];float price;} apple, orange, melon;
  • 15. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 58 dari 77Sangat penting untuk membedakan antara structure model, dan structure object. model adalahtype, dan object adalah variable. Kita dapat membuat banyak objects (variables) dari satumodel (type).Contoh :// example about structures#include <iostream.h>#include <string.h>#include <stdlib.h>struct movies_t {char title [50];int year;} mine, yours;void printmovie (movies_t movie);int main (){char buffer [50];strcpy (mine.title, "2001 A Space Odyssey");mine.year = 1968;cout << "Enter title: ";cin.getline (yours.title,50);cout << "Enter year: ";cin.getline (buffer,50);yours.year = atoi (buffer);cout << "My favourite movie is:n ";printmovie (mine);cout << "And yours:n ";printmovie (yours);return 0;}void printmovie (movies_t movie){cout << movie.title;cout << " (" << movie.year << ")n";}Output :Enter title: AlienEnter year: 1979My favourite movie is:2001 A Space Odyssey (1968)And yours:Alien (1979)
  • 16. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 59 dari 77Contoh diatas menjelaskan bagaimana menggunakan elemen dari struktur dan struktur itusendiri sebagai variable normal. Contoh, yours.year merupakan variable valid dengan tipeint, dan mine.title merupakan array valid dari 50 chars.Perhatikan mine dan yours juga berlaku sebagai valid variable dari tipe movies_t ketika di-pass ke-function printmovie(). Salah satu keuntungan dari structures yaitu kita dapatmengacu pada setiap elemennya atau keseluruhan blok struktur.Contoh :// array of structures#include <iostream.h>#include <stdlib.h>#define N_MOVIES 5struct movies_t {char title [50];int year;} films [N_MOVIES];void printmovie (movies_t movie);int main (){char buffer [50];int n;for (n=0; n<N_MOVIES; n++){cout << "Enter title: ";cin.getline (films[n].title,50);cout << "Enter year: ";cin.getline (buffer,50);films[n].year = atoi (buffer);}cout << "nYou have entered these movies:n";for (n=0; n<N_MOVIES; n++)printmovie (films[n]);return 0;}void printmovie (movies_t movie){cout << movie.title;cout << " (" << movie.year << ")n";}
  • 17. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 60 dari 77Output :Enter title: AlienEnter year: 1979Enter title: Blade RunnerEnter year: 1982Enter title: MatrixEnter year: 1999Enter title: Rear WindowEnter year: 1954Enter title: Taxi DriverEnter year: 1975You have entered these movies:Alien (1979)Blade Runner (1982)Matrix (1999)Rear Window (1954)Taxi Driver (1975)Pointer to structureSama seperti pada tipe lainnya, struktur juga dapat ditunjuk oleh pointer. Aturannya samauntuk setiap tipe data. Pointer harus dideklarasikan sebagai pointer untuk struktur :struct movies_t {char title [50];int year;};movies_t amovie;movies_t * pmovie;amovie merupakan object dari tipe struct movies_t dan pmovie adalah pointer untukmenunjuk ke objek dari tipe struct movies_t. maka, deklarasi dibawah ini juga benar :pmovie = &amovie;Contoh :// pointers to structures#include <iostream.h>#include <stdlib.h>struct movies_t {char title [50];int year;};int main ()
  • 18. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 61 dari 77{char buffer[50];movies_t amovie;movies_t * pmovie;pmovie = & amovie;cout << "Enter title: ";cin.getline (pmovie->title,50);cout << "Enter year: ";cin.getline (buffer,50);pmovie->year = atoi (buffer);cout << "nYou have entered:n";cout << pmovie->title;cout << " (" << pmovie->year << ")n";return 0;}Output :Enter title: MatrixEnter year: 1999You have entered:Matrix (1999)Operator -> merupakan operator penunjuk yang digunakan secara khusus bersama denganpointer untuk struktur dan pointer untuk class. Memungkinkan kita untuk tidak menggunakantanda kurung pada setiap anggota struktur yang ditunjuk. Dalam contoh digunakan :pmovie->titleAtau dalam penulisan yang lain :(*pmovie).titleKedua ekspresi tersebut diatas : pmovie->title dan (*pmovie).title benar dan berartievaluasi elemen title dari struktur yang ditunjuk (pointed by) pmovie. Harus dibedakan dari :*pmovie.titleYang ekuivalen dengan :*(pmovie.title)Dibawah ini merupaka tabel rangkuman, kombinasi yang mungkin terjadi antara pointer danstruktur :Expression Description Equivalentpmovie.title Element title of structure pmoviepmovie->title Element title of structure pointed by pmovie (*pmovie).title*pmovie.title Value pointed by element title of structure pmovie *(pmovie.title)
  • 19. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 62 dari 77Nesting structuresStruture juga dapat berbentuk nested (bersarang) sehingga suatu elemen dari suatu strukturdapat menjadi elemen pada struktur yang lain :struct movies_t {char title [50];int year;}struct friends_t {char name [50];char email [50];movies_t favourite_movie;} charlie, maria;friends_t * pfriends = &charlie;Setelah deklarasi diatas, dapat digunakan ekspresi sbb :charlie.namemaria.favourite_movie.titlecharlie.favourite_movie.yearpfriends->favourite_movie.year(Dimana 2 ekspresi terakhir ekuivalen)User defined data typesDefinition of own types (typedef).C++ memungkinkan kita untuk mendefinisikan tipe berdasarkan tipe data yang sudah ada.Untuk itu digunakan keyword typedef, dengan format :typedef existing_type new_type_name ;dimana existing_type adalah tipe data dasar pada C++ dan new_type_name adalah nama daritipe baru yang didefinisikan. Contoh :typedef char C;typedef unsigned int WORD;typedef char * string_t;typedef char field [50];Contoh diatas telah mendefinisikan empat tipe data baru : C, WORD, string_t dan fieldsebagai char, unsigned int, char* dan char[50] yang akan digunakan nanti seperti berikut :C achar, anotherchar, *ptchar1;WORD myword;string_t ptchar2;field name;
  • 20. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 63 dari 77UnionUnion memungkinkan bagian dari memory dapat diakses sebagai tipe data yang berbeda,walaupun pada dasarnya mereka berada pada lokasi yang sama di memory. Pendeklarasiandan penggunaanya hampir sama dengan struktur tetapi secara fungsional berbeda :union model_name {type1 element1;type2 element2;type3 element3;..} object_name;Semua elemen pada deklarasi union declaration menempati tempat yang sama dimemory.Ukuran yang digunakan diambil dari tipe yang paling besar. Contoh :union mytypes_t {char c;int i;float f;} mytypes;Mendefinisikan tiga elemen :mytypes.cmytypes.imytypes.fTiap data memiliki tipe yang berbeda, karena menempati lokasi yang sama dmemory, makaperubahan terhadap satu elemen akan mempengaruhi elemen yang lain.Salah satu kegunaan union, memungkinkan untuk menggabungkan tipe dasar dengan suatuarray atau struktur dari elemen yang lebih kecil. Contoh :union mix_t{long l;struct {short hi;short lo;} s;char c[4];} mix;Mendefinisikan tiga nama yang memungkinkan kita untuk mengakses grup 4 bytes yang sama: mix.l, mix.s dan mix.c dan dapat digunakan menutut bagaimana kita akan mengaksesnya,sebagai long, short atau char. Tipe data yang sudah digabungkan, arrays dan structuresdalam suatu union, maka dibawah ini merupakan cara pengakses-an yang berbeda :
  • 21. Modul C++Laboratorium Sistem Informasi Universitas Gunadarma 64 dari 77Anonymous unionsPada C++ terdapat option unions tanpa nama (anonymous union). Jika disertakan union dalamstructure tanpa nama objek(yang dituliskan setelah kurung kurawal { }) maka union akantidak memiliki nama dan kita dapat mengakses elemennya secara langsung dengan namanya.Contoh:unionstruct {char title[50];char author[50];union {float dollars;int yens;} price;} book;anonymous unionstruct {char title[50];char author[50];union {float dollars;int yens;};} book;Perbedaan deklarasi diatas adalah program pertama diberi nama pada union (price) dan yangkedua tidak. Pada saat mengakses anggota dollars dan yens dari objek. Pada programpertama :book.price.dollarsbook.price.yensSedangkan untuk program kedua :book.dollarsbook.yens

×