Meeting 12 & 13 Class, String, set & get Function
Game Technology Design Course College of Multi Media Yogyakarta Spring 2016 - 2017 Tri Anggraeni, S.Kom., M.Sc.
Reference : Deitel, P. & Deitel, H. (2014). C++ How to Program 9th Edition. Massachusetts: Prentice Hall.
Class : user-defines type
Data members
Member functions
Each class New type
1. Membuat class dengan 1 fungsi (Coba)
/* GradeBook.cpp Membuat class GradeBook yang berisi member function displayMessage, membuat object GradeBook & menggunakannya untuk memanggil function displayMessage. */ #include <iostream> using namespace std;
// GradeBook class definition class GradeBook { public: /* function that displays a welcome message to the GradeBook user */ void displayMessage() { cout << "Welcome to the Grade Book!" << endl << endl;
} // end function displayMessage }; // end class GradeBook
Penjelasan program : class GradeBook { Untuk readibilitas : • Nama kelas dimulai dengan huruf kapital • Setiap kata dalam nama kelas diawali huruf
kapital.
• Badan class diletakkan di antara tanda kurung buka kurawal { dan kurung tutup kurawal }
• Letakkan tanda titik koma ( ; ) setelah kurung tutup kurawal class.
public: Access specifier Harus diikuti tanda titik dua ( : )
• Fungsi dibuat setelah mendeklarasikan access
specifier untuk mengindikasikan bahwa fungsi yang akan dibuat dapat diakses oleh public atau : a. Fungsi yang lain dalam program (seperti
fungsi main) b. Fungsi yang ada di class yang lain
void displayMessage() function header • Fungsi : Melakukan suatu fungsi Menghasilkan suatu nilai ketika selesai dieksekusi
Contoh : fungsi perhitungan menghasilkan perhitungan
Cara penulisan nama fungsi = variabel. Diawali dengan huruf kecil. Jika mengandung 2
kata/lebih, huruf awal kata ke-2 dst ditulis dengan huruf kapital.
Contoh : displayMessage, calculatePoint, endScore Disebut dengan camel case Karena pola naik
turun huruf kecil dan besarnya seperti punggung unta.
• Fungsi harus menentukan tipe return : Untuk mengindikasikan tipe dari nilai yang
dihasilkan oleh function.
• void : salah satu tipe return/hasil fungsi displayMessage() Menandakan bahwa fungsi displayMessage()
tidak akan menghasilkan suatu data yang dapat menjadi input pada fungsi lain.
void displayMessage() function header
void displayMessage() function header
• Nama fungsi harus diikuti tanda kurung. • void displayMessage() tanda kurung tidak berisi
apapun. Menandakan bahwa fungsi displayMessage tidak
membutuhkan data tambahan untuk mengeksekusi baris-baris program di dalamnya.
void displayMessage() { cout << "Welcome to the Grade Book!" << endl << endl; }
Function body (Di dalam tanda kurung kurawal)
// function main begins program execution int main() { GradeBook myGradeBook; /* create a GradeBook object named myGradeBook */ myGradeBook.displayMessage(); /* call object's displayMessage function */ system("pause"); } // end main
Lanjutan program :
GradeBook myGradeBook;
• Object : komponen yang dapat digunakan berulang2
• Member function of a class hanya dapat digunakan setelah object class-nya dibuat.
• Contoh : GradeBook myGradeBook; GradeBook tamaraGradeBook;
Name of class Object of the class Variabel yang bertipe GradeBook
User-defined type
User-defined type • Fundamental type : int, short, long, float,
double, char, boolean. Otomatis diketahui oleh compiler.
• User-defines type (contoh) : GradeBook Hanya diketahui jika class definition
GradeBook sudah dibuat dalam program. Jika tidak : program error
myGradeBook.displayMessage();
• Variabel myGradeBook memanggil fungsi displayMessage.
• Dilakukan dengan menulis tanda titik setelah nama variabel & nama fungsi.
Contoh lain : • Jika nama variabel : pointTamara dan nama
fungsi : calculatePoint() Cara memanggil fungsi : pointTamara.calculatePoint()
Hasil
2. Membuat Fungsi dengan 1 Parameter
• Parameter : informasi tambahan yang membantu berjalannya suatu fungsi.
• 1 fungsi dapat memiliki lebih dari 1 parameter.
Coba program berikut :
/* GradeBook2 _Class_Berparameter.cpp Membuat class GradeBook2 yang berisi member function displayMessage yang memiliki
parameter, membuat object GradeBook2 & menggunakannya untuk memanggil function. */
#include <iostream> #include <string> // untuk menggunakan kelas standar string using namespace std; // GradeBook2 class definition class GradeBook2 { public: /* function that displays a welcome message to the GradeBook user */ void displayMessage(string courseName ) { cout << “Grade book2 for\n" << courseName << "!“ << endl;
} // end function displayMessage }; // end class GradeBook2
Disebut parameter
void displayMessage(string courseName)
Menunjukkan bahwa fungsi displayMessage memerlukan string untuk berjalan.
String : • Termasuk namespace std • Jika tidak menggunakan using namespace harus
diinisialisasikan dengan cara std::string
Parameter
Tipe Identifier
void displayMessage(string courseName) • 1 fungsi dapat memiliki lebih dari 1 parameter. • Cara penulisan : dipisah kan dengan tanda koma.
• Contoh :
void displayMessage(string courseName, int jumlahPeserta)
• Jumlah, urutan, dan tipe argumen pada fungsi harus sama dengan jumlah, urutan, dan tipe pada parameternya.
// function main begins program execution int main() { string nameOfCourse; // string to store the course name GradeBook2 myGradeBook; /* create a GradeBook2 object named myGradeBook */
// prompt for and input course name cout << "Please enter the course name:" << endl; getline( cin, nameOfCourse ); // read a course name with blanks cout << endl; // output a blank line
myGradeBook.displayMessage( nameOfCourse ); /* call myGradeBook's displayMessage function and pass nameOfCourse as an argument */ } // end main
Disebut argument
Alternatif hasil
Please enter the lecture :
Lecture : Tri Anggraeni
User bisa memasukkan nama & pengajar mata kuliah
Ditampilkan oleh program sesuai masukan user
getline( cin, nameOfCourse ); • Coba ganti menggunakan cin saja tanpa
menggunakan getline. Jalankan program. • Masukkan Algoritma Pemrograman ketika program
meminta untuk memasukkan nama course. Tekan Enter.
• Apa yang terjadi? Hanya kata Algoritma yang kemudian muncul.
Kata Pemrograman tidak muncul. cin hanya membaca & menyimpan karakter
sampai spasi. getline menyimpan seluruh karakter termasuk
spasi.
3. Data Members, set and get Functions
Data member Variabel yang dideklarasikan di dalam class, tetapi
di luar fungsi.
• Keuntungan menggunakan data member : Semua fungsi yang ada pada kelas dapat
menggunakannya.
• Sebagian besar data member dideklarasikan setelah access specifier private disebut data hiding.
Dengan cara memanggil fungsi getCourseName
Menyimpan course name pada data member GradeBook3
getCourseName
setCourseName
displayMessage
Member functions GradeBook3 class :
Mendapatkan course name dari data member
Men-display (menampilkan) welcome message yang memuat nama mata kuliah (course name)
Coba
/* 08_Class_Set_Get.cpp Membuat class GradeBook3 yang berisi data member courseName dan fungsi member untuk mengeset dan membaca nilainya */ #include <iostream> #include <string> /* untuk menggunakan kelas standar string */ using namespace std;
// GradeBook3 class definition class GradeBook3 { public: /* fungsi yang menyimpan nama mata kuliah : */ void setCourseName(string name) { courseName = name; /* data member courseName. Diberi nilai name */ } // end function setCourseName /* fungsi yang memperoleh nama mata kuliah dari data member courseName di fungsi setCourseName : */ string getCourseName() { return courseName; /* menghasilkan courseName object */ } // end function getCourseName
Fungsi yang tidak perlu menghasilkan apapun,
sehingga tipenya cukup void
Menyimpan course nam data member GradeBoo
Mendapatkan course na dari data member
/* fungsi yang menampilkan welcome message */ void displayMessage() { /* statement untuk memanggil getCourseName untuk memperoleh nama mata kuliah */ cout << "Grade book for " << getCourseName() << ".\n" << endl;
} // end function displayMessage private: string courseName; // data member }; // end class GradeBook3
Mendeklarasikan data member dengan private berarti menyembunyikan data
member (data hiding)
// fungsi main memulai eksekusi program int main() { string nameOfCourse; // string to store the course name GradeBook3 myGradeBook; /* create a GradeBook3 object named myGradeBook */
// menampilkan nilai awal courseName cout << “Course name awal : ” << myGradeBook. getCourseName() << endl << endl;
// prompt untuk menginput course name cout << "Please enter the course name:" << endl;
Menyembunyikan data member courseName yang dideklarasikan di
class GradeBook
Data member courseName digunakan di fungsi setCourseName & getCourseName.
Local string variable yang dibuat untuk menyimpan nama mata kuliah yang dimasukkan oleh user, yang didapat dari fungsi getline
// read a course name with blanks getline( cin, nameOfCourse ); // mengeset nama mata kuliah myGradeBook.setCourseName(nameOfCourse); cout << endl; // output a blank line // menampilkan pesan dengan nama mata kuliah yang baru myGradeBook.displayMessage(); system("pause"); } // end main
Local variable Variabel yang dideklarasikan di dalam suatu fungsi. Hanya dapat digunakan dari setelah
dideklarasikan, sampai tanda kurung kurawal ( } ) penutup fungsi.
Tidak dapat digunakan di luar fungsi yang mendeklarasikannya.
Seperti inikah hasilnya?
Mengapa “Course name awal : ” tidak berisi apa2?
Cek kode programnya :
Fungsi main program GradeBook :
int main() { string nameOfCourse; // string to store the course name GradeBook3 myGradeBook; /* create a GradeBook3 object named myGradeBook */ // menampilkan nilai awal courseName cout << “Course name awal : ” << myGradeBook.
getCourseName() << endl << endl;
// prompt untuk menginput course name cout << "Please enter the course name:" << endl;
Di GradeBook3 class definition : class GradeBook3 { public: /* fungsi yang menyimpan nama mata kuliah : */
void setCourseName(string name) { courseName = name; } // end function setCourseName string getCourseName() { return courseName; } // end function getCourseName
Karena itulah nilai Course name awal kosong.
Memperoleh nama mata kuliah dari data member courseName di fungsi setCourseName
Sebelum memanggil getCourseName, fungsi main TIDAK MEMANGGIL fungsi setCourseName, sehingga argumen name-nya kosong
Hasil dari Latihan 2 : Membuat Fungsi dengan 1 Parameter
Hasil dari Latihan 3 : Data Members, set and get Functions
?? Berbedakah Lha trus kenapa pake fungsi get segala ya ??
Bisakah fungsi setCourseName & getCourseName dijadikan 1 ?? Coba : 1. Save as program Class_set_get menjadi Without_Get.cpp. 2. Dari fungsi getCourseName : pindahkan baris “return
CourseName;” ke fungsi setCourseName. 3. Ubah tipe fungsi setCourseName menjadi string (karena
fungsi getCourseName juga bertipe string) 4. Dari fungsi displayMessage : pindahkan “cout << "Grade book
for "” ke fungsi main, di baris ketika fungsi setCourseName dipanggil, sehingga barisnya menjadi : cout << "Grade book for " <<
myGradeBook.setCourseName(nameOfCourse); 5. Di fungsi main : hapus semua baris yang memanggil fungsi
displayMessage & getCourseName. 6. Hapus seluruh definisi fungsi getCourseName &
displayMessage agar tidak terbaca oleh compiler. Jalankan program. Betulkan error2 yang terjadi sampai hasilnya :
Alternatif hasil
Bisa jalan tanpa beda dengan ketika ada fungsi getCourseName!!
Once again :: Kenapa pake fungsi get segala ya
??
Di fungsi main Class_set_get ada myGradeBook.displayMessage(); Memanggil fungsi displayMessage :
void displayMessage() { cout << "Grade book for " << getCourseName() << ".\n" << endl;
}
Memanggil fungsi getCourseName : string getCourseName() { return courseName; Data member }
Mengakses data member melalui fungsi get menjadikan class lebih mudah di-maintain &
mengurangi kemungkinan kesalahan.
Other reasons why we need set & get functions 1. Untuk memungkinkan class client mengeset dan
memperoleh (get) suatu nilai dari data member private. → Class/object client (klien dari suatu object) :
statement yang memanggil fungsi public di object lain.
→ Agar dapat diakses class client, access specifier fungsi set & get harus public seperti pada contoh.
2. Fungsi set & get memungkinkan client untuk berinteraksi dengan sebuah object, dengan tetap mengkapsulasi data private object dalam object itu. → Mendeklarasikan data member dengan access
specifier private merupakan data hiding karena menjadikan data member hanya bisa diakses & digunakan oleh fungsi2 di dalam object dimana data member itu dideklarasikan.
→ Fungsi public set & get memungkinkan class clients untuk dapat mengakses data yg di-hidden (yang dideklarasikan dengan access specifier private).
→ Client tidak dapat memodifikasi dan memperoleh object data.
• Nama fungsi set & get biasanya diawali oleh kata set atau get.
• Fungsi set sering disebut sebagai mutators (karena fungsi set me-mutate (mengubah) nilai).
• Fungsi get sering disebut sebagai accessors (karena fungsi get mengakses suatu nilai).
Hanya fungsi get& set yang memanipulasi data member secara langsung yang harus diubah.
Contoh : courseName ingin dibuat sehingga memuat 2 data member : courseNumber & courseTitle. Fungsi displayMessage tetap dapat memanggil
fungsi getCourseName 1 kali & memperoleh courseName yang lengkap yang memuat courseNumber & courseTitle.
Fungsi getCourseName dapat dibuat sehingga menghasilkan 1 string yang berisi courseNumber & courseTitle. Coba !!
Perubahan pada data member courseName tidak perlu mengubah fungsi displayMessage
/* Set_Get_2_data_member.cpp Menampilkan courseName yang memuat 2 data member :
courseNumber & courseTitle */ #include <iostream> #include <string> // untuk menggunakan kelas standar string using namespace std; // GradeBook3 class definition class GradeBook3 { public: /* fungsi yang mengeset nama mata kuliah */ void setCourseName(string nomor, string title) { courseNumber = nomor; /* menyimpan nama mata kuliah pada object */ courseTitle = title; courseTitle = courseNumber + " " + courseTitle; } // end function setCourseName
/* fungsi yang membaca nama mata kuliah */ string getCourseName() { return courseTitle; } // end function getCourseName /* fungsi yang menampilkan welcome message */ void displayMessage() { /* statement untuk memanggil getCourseName untuk memperoleh nama mata kuliah */ cout << "Grade book for " << getCourseName() << ".\n" << endl; } // end function displayMessage private: string courseNumber, courseTitle; // data member }; // end class GradeBook3
// function main begins program execution int main() { string kodeMtKul, namaMtKul; // string to store the course name GradeBook3 myGradeBook; /* create a GradeBook3 object named myGradeBook */ // prompt untuk menginput course number cout << "\nEnter the course number : " << endl; // read a course number with blanks getline( cin, kodeMtKul ); // prompt untuk menginput course title cout << "\nEnter the course title : " << endl;
// read a course number with blanks getline( cin, namaMtKul ); // mengeset nama mata kuliah myGradeBook.setCourseName(kodeMtKul, namaMtKul); cout << endl; // output a blank line // menampilkan pesan dengan nama mata kuliah yang baru myGradeBook.displayMessage(); system("pause"); } // end main