BİLGİSAYAR programlama II Yapılar ve Sınıflar (struct ve class) BİLGİSAYAR programlama II
struct
Bir yapı (struct) basit değişkenler topluluğu şeklinde tanımlanabilir. Yapıdaki değişkenlerin tipleri birbirinden farklı olabilir (Aynı olma zorunluluğu yoktur). Dizi değişkenlerde dizinin elemanlarının tümünün aynı tipte olma zorunluluğu olduğunu hatırlayalım.
Dizideki verilerden her biri dizinin elemanları olarak isimlendirilmektedir. Yapıdaki verilerden her biri yapının üyeleri olarak isimlendirilmektedir.
struct örnek tanımlama
Yapılar sınıflarla birlikte nesne programlamanın iki önemli yapı elemanıdır.
Örnek program #include <iostream> struct Parca { }; int ModelNo; struct Parca { int ModelNo; int ParcaNo; float Maliyet; };
main() { } Parca P1; // Yapı değişkeni tanımlama P1.ModelNo = 60; P1.ParcaNo = 601; P1.Maliyet = 21.50; // Yapı üyelerinin görüntülenmesi cout << "Model " << P1.ModelNo; cout << ", parca " << P1.ParcaNo << endl; cout << P1.Maliyet << " TL’ye mal olmaktadır.”; }
Ekran çıktısı
Örnek program #include <iostream> main() { struct OGRENCI main() { struct OGRENCI int Vize; int Final; char Ad[25]; } ;
} struct OGRENCI Lisansustu; // C tarzi struct bildirimi OGRENCI Lisans; // C++ tarzi struct bildirimi Lisansustu.Vize = 90; Lisans.Final = 100; cout << Lisansustu.Vize << " " << Lisans.Final << endl; }
Ekran çıktısı
Bu örnekte diğerlerinden farklı olarak, yapı içerisinde fonksiyon (metod) kullanılmıştır. Yapılar içerisinde (Sınıf içerisinde de aynı) kullanılan fonksiyonlara metod adı verilmektedir.
Örnek #include <iostream> #include <conio.h> struct Zaman struct Zaman { int Saat; int Dakika; int Saniye; int SaniyeyeDonustur() return Saat*60*60+Dakika*60+Saniye; } };
main() { Zaman t; cout<<"Bir zaman girin (saat dakika saniye): "; cin>>t.Saat>>t.Dakika>>t.Saniye; cout << “Girilen zaman toplam “ << t.SaniyeyeDonustur() << “ saniyedir...”; getch(); }
Ekran çıktısı
SaniyeyeDonustur() metodu yapı içerisinde tanımlanmıştır. Yapı içerisindeki metotlar yapı tanımlaması bittikten sonra da tanımlanabilir. Metot bildirimi yapı içerisinde yapılır, fakat metot tanımlaması (açık yazılımı) metot dışında yapılır. Önce yapı adı, sonra :: ve metot adı yazılarak tanımlama yapılır:
Örnek #include <iostream> #include <conio.h> struct Zaman struct Zaman { int Saat; int Dakika; int Saniye; int SaniyeyeDonustur(); };
Zaman::SaniyeyeDonustur() { return Saat*60*60+Dakika*60+Saniye; }
main() { Zaman t; cout<<"Bir zaman girin (saat dakika saniye): "; cin>>t.Saat>>t.Dakika>>t.Saniye; cout << "Girilen zaman toplam " << t.SaniyeyeDonustur() << " saniyedir..."; getch(); }
Tanımlanan yapılar dizi değişken tanımlamalarında bilgi tipi olarak da kullanılabilir.
Örnek #include <iostream> #include <conio.h> const int N = 2; struct Parca { int ModelNo; int ParcaNo; float Maliyet; };
main() { int i; Parca P[N];
for (i=0; i<N; i++) { } cout << endl; cout << "Model no: "; cin >> P[i].ModelNo; cout << "Parca no: "; cin >> P[i].ParcaNo; cout << "Maliyet: "; cin >> P[i].Maliyet; }
cout << endl; for (i=0; i<N; i++) { } cout << "Model: " << P[i].ModelNo; cout << " Part: " << P[i].ParcaNo; cout << " Maliyet: " << P[i].Maliyet << endl; }
Ekran çıktısı
class
Yapı (struct) tanımlamasına çok benzer olan class (sınıf) tanımlaması vardır. Sınıflarda üyeler için özel (private) ve genel (public) ayrımların yapılabilmesidir. Bu ayrım sınıf üyelerine (genelde değişkenler) dışarıdan müdahelenin yapılamamasını sağlamaktadır. Üye değişkenlere sadece sınıf fonksiyonları (metod) ile ulaşabilmeye izin verilmesi amaçlanmaktadır.