Merhaba arkadaşlar bu yazıda Struct ve Class yapılarından bahsedeceğim.
STRUCTURES
Struct farklı tipteki elemanları içinde barındıran bi küme gibi düşünülebilir. Array gibi davranır. Array tek tip verileri toplayan bi küme iken, struct daha kapsamlıdır( aynı anda hem int hem double gibi değişik tipte birden çok değişkeni olabilir). Struct, içindeki değişkenler declare edilmeden önce mutlaka define edilmelidir ( tanımlanmalıdır).
Structure Types ( Struct Tipleri )
Structlar, global olarak tanımlanmalıdır.
// Örnek struct yapısı
1
2
3
4
5
6
|
struct CDAccountV1
{
double balance;
double interestRate;
int term;
};
|
Struct ‘ ın içindeki değişkenler member yani üye olarak adlandırılır. Buradaki balance, interestRate, term CDAccountV1 struct’ının üyeleridir.
Declare Structure Variable ( Struct Tipindeki değişkeninin ifade edilişi )
Accessing Structure Members ( Struct ‘ın üyelerine erişme)
Üyelere erişmek için dot(nokta) operatörü kullanılır.
1
2
3
|
account.balance
account.interestRate
account.term
|
Yukarıda gördüğünüz gibi, account değişkenin 3 tane member’ı var. Ve bunlara erişmek için dot operatörünü kullandık.
Farklı struct yapıları aynı değişken adına sahip üyelere sahip olabilir, bu çakışmaya yol açmaz. Yani buradaki balance bi member ve CDAccountV1 ‘ e ait. Aynı zamanda BalanceV1 adında bi struct ‘ın da balance adında bi member ‘ ı olabilir.
Structure Assignments ( Struct Atamaları )
CropYield ( mahsul verimi ) adında bi struct yapımız olsun. oranges ve lemons adında iki değişkeni olsun.
1
2
|
CropYield oranges, lemons;
oranges = lemons;
|
Structures as Function Arguments ( Structların Fonksiyona Argüman Olarak gönderilmesi)
Pass-by-value, Pass-by-reference ,Or combination
Yani structlar fonksiyonlara referans olarak, değerini kopyalamak için ya da her iki gönderim şekli birlikte kullanılarak da argüman olarak kullanılabilir.
Diğer veri tiplerinde olduğu gibi , bi fonksiyonun return tipi olarak da kullanılabilir.
Initializing Structures ( Struct’ların İlklendirilmesi )
// Örnek kod parçası
1
2
3
4
5
6
7
|
struct Date
{
int month;
int day;
int year;
};
Date dueDate = {10, 24, 2016};
|
CLASSES ( Sınıflar )
Nesneye dayalı programlamanın temelinde sınıf yapısı vardır. Re-usable code ( yeniden kullanılabilir kod ) yazmak için sınıflar kullanılır.
Class, yapı olarak struct a benzer . Struct ‘ın daha gelişmiş versiyonu olarak düşünülebilir. Struct’tan farklı olarak sınıflar aynı yapının üzerinde çalışacak fonksiyonlar içerir.
// Örnek Class Yapısı
1
2
3
4
5
6
7
|
class DayOfYear
{
public:
void output();
int month;
int day;
};
|
Declaring Objects ( Nesne Tanımlama / İfade Etme)
1
|
DayOfYear today, birthday;
|
Bu objeler, data(veri) ve operasyon (member fonksiyon) içerir. Yukarıdaki örnekteki datalar month ve day , operasyon ise output() fonksiyonudur.
Class Member Access ( Sınıfın Üyelerine Erişme )
Tıpkı struct’taki gibi dot operatörü kullanılarak erişilebilir.
1
2
3
|
today.month
today.day
today.output();
|
Class Member Functions ( Sınıfın Member Fonksiyonları )
Diğer fonksiyonlara benzer şekilde main ‘den sonra tanımlanmalıdır.
1
2
3
4
|
void DayOfYear::output()
{
…
}
|
Class Member Functions Definition ( Member Fonksiyonların Tanımlanması )
Fonksiyonlar, class’ın bütün objeleri için kullanılır. Örnek kullanım -> today.output();
today objesi için output() fonksiyonu kullanımı bu şekildedir, DayOfYear tipinde başka objeler oluşturarak , diğer datalar ve output fonksiyonuna dot operatörü ile erişilebilir.
1
2
3
4
5
6
7
8
9
10
|
void input();
void DayOfYear::input()
{
cout <<" Enter date: \n ";
cout << " Enter month ";
cin >> month;
cout << "Enter day ";
cin << day ;
}
|
Dot and Scope Resolution Operator ( . ve :: operatörleri )
dot operatörü(.), objenin member ini specify etmek için kullanılır
scope resolution(::) ise, member fonksiyonun hangi class tan geldiğini görmek için kullanılır.
A Class’s Place ( Bir Sınıfın Yeri )
Class; double, int vb. tipler gibi kullanabileceğimiz , diğer veri tipleri üzerine gerçekleştirdiğimiz operasyonları üzerinde gerçekleştirebileceğimiz bir veri tipidir. Herhangi bi data tipini nasıl kullanıyorsak , class’ ı da aynı şekilde rahatlıkla kullanabiliriz.
Class’ın kendi değişkenleri vardır bunlara daha önce de belirttiğim gibi obje adı verilir.
Encapsulation ( Kapsülleme )
Bütün verileri ve veri üzerinde çalışan bütün operasyonları(data üzerinde gerçekleşen işlemler), aynı veri yapısının içine koymaya encapsulation(kapsülleme) denir. Herhangi bir veri tipini içerebilir.
Nesneye dayalı programın temellerindendir. Class yapısı sayesinde encapsulationişlemini gerçekleştirebiliyoruz.
Abstract Data Types ( Soyut Veri Tipleri)
Programı kullanan kullanıcının, daha önceden yazılmış olan sınıfın detaylarını bilmemesi, soyutlaştırma yapılmasıyla alakalıdır. Abstract Data Tipleri kullanılarak , soyutlaştırma yapılır.
Principles of OOP ( Nesneye Dayalı Programlamanın Prensipleri )
Information Hiding-> kullanıcının bilmesine gerek olmayan tüm bilgileri, operasyonların nasıl yapıldığını saklamak.
Data Abstraction -> Verinin nasıl manipüle edildiği ile ilgili detayları gizlemek.
Encapsulation -> birbiri ile ilişkili veri ve operasyonları bir araya getirmek.
Public and Private Members
Kullanıcının doğrudan erişimine ihtiyacı olmayan bilgiler private(gizli) olarak tanımlanır. Sınıfı kullanan programcıların erişmesinde ve bilmesinde bi sakınca olmayan ve kullanıcının işine yarayacak bilgiler ise public(açık) olarak tanımlanır.
Class yapısı içinde public olanlar ile private olanlar yazılırken herhangi bi sıralama zorunluluğu yoktur. Yani istersek önce public olanları istersek de önce private olanları tanımlayabiliriz. Public olanların önce tanımlanması yaygın olan kullanım şeklidir.
1
2
3
4
5
6
|
class MyClass{
public:
......
private:
.......
};
|
Accessor and Mutator Functions
Accessor -> sadece sınıfın data memberlarına erişen fonksiyonlar.
Mutator -> çağırdığımızda objeyi değiştirebilen fonksiyonlar.
Diyelim ki , MyClass class1; diyerek bi obje oluşturduk. class1 objesi yalnızca publicolan memberlara erişebilir, private olanlara erişme izni yoktur.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class DayOfYear
{
public:
void input( );
void output( );
void set(int newMonth, int newDay);
void set(int newMonth);
int getMonthNumber( );
int getDay( );
private:
int month;
int day;
};
|
Structures versus Classes ( Struct ve Class Yapısının Karşılaştırılması )
- Structların üyeleri (member) public olarak kabul edilir. Yalnızca veri içerir, fonksiyon içeremez.
- Class yapısında ise, class’ın içinde memberların private ya da public olduğunu belirtmez isek , default olarak hepsi private tanımlanmış kabul edilir.
- Teknik olarak benzer yapılardır, mekanizma olarak ise farklıdırlar.
Interface of Class –> Bi sınıfın arayüzü public olan fonksiyonlarıdır. Arayüz sayesinde, kullanıcılar sınıfları kullanabilir hale gelirler.
Bu derste Struct ve Class yapılarını genel özellikleriyle anlatmaya çalıştım. Bir sonraki derste Class yapısı ile ilgili daha ayrıntılı bilgiler vermeye çalışacağım, diğer derste görüşmek üzere
