C++'ta Diziler ve Class Kullanımı

C++'ta Diziler ve Class Kullanımı

C++ programlama dilinde diziler ve sınıflar oldukça önemlidir Diziler, aynı türden birden fazla verinin tek bir değişkende saklanmasını sağlar Sınıflar ise verileri ve fonksiyonları bir arada tutar Sınıfların içinde diziler de tanımlanabilir ve kullanılabilir Bu sayede çok daha ileri düzey fonksiyonellikler sunulur Bu makalede C++ programlama dilinde dizilerin ve sınıfların kullanımı detaylı bir şekilde anlatılmaktadır

C++'ta Diziler ve Class Kullanımı

C++ programlama dilinde en temel ve önemli kavramlardan biri dizilerdir. Diziler, aynı türdeki birden fazla verinin tek bir değişkende saklanmasını sağlar. Diziler, programlama dünyasında çok sık kullanılan bir veri türüdür ve C++ dilinde çok fazla yer tutar. Bu makalede C++ programlama dilinde dizilerin ve sınıfların kullanımı ele alınacak.

Bunun yanı sıra, C++ programlama dilinde sınıflar özellikle nesne yönelimli programlama için oldukça önemlidir. Bu programlama paradigması, programlama dünyasında oldukça popülerdir ve C++ dilinde de sıklıkla kullanılır. Sınıflar, birden fazla veri türünü bir araya getirerek oluşturulan yapılardır ve C++ dilinde nesne olarak kullanılır.

Bu makalede öncelikle dizilerin ne olduğundan ve nasıl kullanıldığından bahsedilecek. Ardından sınıfların ne olduğu ve nasıl kullanılabileceği, özellikleri ve fonksiyonları içinde dizi kullanımı detaylı bir şekilde anlatılacak. Ayrıca bir sınıfın başka bir sınıf içinde nasıl kullanılabileceği ve nesne yönelimli programlama kavramları ve özellikleri de ele alınacaktır.


Dizilerin Tanımı ve Kullanımı

C++ programlama dilinde diziler, aynı veri tipindeki birden fazla değişkenin tek bir isim altında düzenlenmesini sağlayan yapılardır. Diziler, bir veri tipinin farklı değerleriyle çalışmak için kullanılır.

Dizi tanımlamak için öncelikle veri tipi belirlenir, ardından dizi boyutu belirtilir. Dizi boyutu, dizide kaç eleman olacağını belirleyen bir tam sayıdır. Diziler, köşeli parantezler içinde tanımlanırlar.

Dizideki elemanlara ulaşmak için ise, elemanın indeksi kullanılır. Dizi indeksi, dizinin başından itibaren sıfırdan başlar. Örneğin, bir diziye ulaşmak için şu şekilde bir kod yazılabilir:

Kod Açıklama
int sayilar[5] = {2, 4, 6, 8, 10}; 5 elemanlı bir sayı dizisi tanımlama
cout << sayilar[0]; 1. elemana erişme (2 yazdırır)
sayilar[2] = 12; 3. elemana 12 atama

Diziler kullanılarak, tek bir değişken adı altında farklı veriler depolanabilir. Örneğin, bir dizide öğrencilerin notları saklanabilir veya bir dizide bir filmdeki karakterlerin isimleri tutulabilir.

Diziler, programlama dilinde oldukça yararlı ve sık kullanılan bir yapıdır. İlerleyen bölümlerde ise sınıflar ve nesne yönelimli programlama kavramları ele alınacaktır.


Sınıfların Tanımı ve Kullanımı

C++ programlama dilinde sınıflar, programcıların karmaşık verileri daha kolay şekle sokarak yönetmelerine olanak tanıyan bir yapıdır. Birçok nesne yönelimli programlama dilinde olduğu gibi, sınıfların temel özellikleri, veri alanları (değişkenler) ve bunların üzerinde işlem yapan işlevler (metodlar) oluşturulur.

Bir sınıf oluşturmak için, öncelikle class kelimesi kullanılarak bir şablon oluşturulmalı ve ardından sınıfın özellikleri belirtilerek tanımlanmalıdır. Sınıfın özellikleri, özelleştirilmiş veri türleri, değişkenler, yapılar ve işlevler olarak tanımlanabilir.

Sınıflar, nesne yönelimli programlamanın temel yapı taşlarıdır ve birçok proje içinde yaygın olarak kullanılır. Nesneler, sınıfların örnekleridir ve sınıfların veri alanlarına erişmek ve işlem yapmak için kullanılır. Yani, bir sınıftan bir nesne oluşturunca, o nesne sınıfın özelliklerini taşımakta ve sınıfın işlevlerine erişebilmektedir.

Sınıf oluşturma, C++ programlama dilinde en temel kavramlardandır ve sınıflar geniş uygulama alanına sahiptir. Özellikle büyük projelerde, programcıların veri yönetimini daha iyi şekilde sağlamak adına sınıflar kullanması, daha temiz ve okunaklı kodlar yazmasına yardımcı olacaktır.


Sınıfların İçinde Dizi Tanımlama ve Kullanımı

C++ programlama dilinde sınıflar, içerisinde verileri ve fonksiyonları bir arada tutmamızı sağlayan yapılardır. Bu yapıların içerisinde diziler de tanımlanabilir ve kullanılabilir. Bir sınıfın içerisinde tanımlanan bir dizi, sınıfın özelliği veya fonksiyonlarından biri tarafından kullanılabilir.

Sınıfların içerisinde dizi tanımlaması yapabilmek için, öncelikle dizi türünün belirtilmesi gerekir. Dizi türü, sınıfın özellikleri veya fonksiyonlarında kullanılacak veri tipini ifade eder. Dizi tanımlaması yapabilmek için sınıfın içinde bir değişken tanımlanmalıdır. Değişken tanımlandıktan sonra, dizi boyutu belirtilmelidir.

Aşağıdaki örnek, sınıf içinde dizi tanımlamanın nasıl yapıldığını göstermektedir:

class OrnekSinif {public:    int sayilar[5]; // sınıf içinde tanımlanmış bir dizi    void diziYazdir() { // sınıfın bir fonksiyonu        for (int i = 0; i < 5; i++) {            cout << sayilar[i] << " ";        }        cout<

Yukarıdaki örnekte, OrnekSinif sınıfı içinde sayilar adında bir dizi tanımlanmıştır. Bu dizi, sınıfın diziYazdir() fonksiyonunda kullanılmaktadır. Kod bloğunun çıktısı aşağıdaki gibidir:

  • 0 2 4 6 8

Sınıfların Özelliklerinde Dizi Kullanımı

C++ programlama dilinde sınıflar, özellikleri içinde diziler kullanarak ileri düzey fonksiyonellikler sunarlar. Sınıf özellikleri içinde tanımlanan diziler, belirli verileri tutmak için kullanılır ve bu verilere erişim sınıfın nesnesi üzerinden yapılır.

Bu özellik sayesinde sınıf nesnesi, hem bir veritabanı olarak hem de program içindeki geniş çaplı dizi işlevleri için kullanılabilir. Örneğin, bir sınıf içinde tanımlanan dizi özelliği, sınıfın temel özelliklerinden birisi olarak kullanılabilir.

Dizi özelliğinin kullanımında, dilin mevcut dizi işlevleri ve sözdizimi kullanılır. Özellikle, sınıf özelliği olarak tanımlanan dizilere default değer atanır ve dizi boyutunun önceden tanımlanması gerekir.

Sınıf Adı Dizi Özelliği
Oyun Oyuncuların İsimleri
Kitap Sayfa Sayıları

Ayrıca, sınıfların özellikleri içinde tanımlanan diziler, dizi işlevleri tarafından kullanılabilecek şekilde döndürülebilir. Bu şekilde, bir dizinin belli elemanlarını ya da bir dizi içindeki belli alt küme elemanlarını saklamak için kullanılabilirler.

  • Sınıf özellikleri içinde tanımlanan diziler, belirli verileri sınıf nesnesi üzerinden saklamak için kullanılabilir.
  • Dizi özelliğinin kullanımında dilin mevcut dizi işlevleri ve sözdizimi kullanılır.
  • Sınıfların özellikleri içinde tanımlanan diziler, dizi işlevleri tarafından kullanılabilecek şekilde döndürülebilir.

Örneğin, aşağıdaki kod parçası bir sınıf içinde tanımlanan bir dizinin öğelerine erişim örneğidir:

class Okul {  public:    string ogrenci_adi[5];    void ogrenci_ekle(string ogrenci_adi) {      for (int i = 0; i < 5; i++) {        if (ogrenci_adi[i] == "") {          ogrenci_adi[i] = ogrenci_adi;          break;        }      }    }};int main() {  Okul okul;  okul.ogrenci_ekle("Ali");  okul.ogrenci_ekle("Merve");  okul.ogrenci_ekle("Ahmet");  cout << okul.ogrenci_adi[0] << endl;  cout << okul.ogrenci_adi[1] << endl;  cout << okul.ogrenci_adi[2] << endl;  return 0;}

Bu kod, Okul sınıfında tanımlanan ogrenci_adi adlı dizi özelliğine erişim sağlamaktadır. Ayrıca, ogrenci_ekle() adlı bir fonksiyon, sınıfın dizisi ile etkileşim halinde olarak, yeni öğrencilerin sınıfa eklenmesine izin verir.

Özetle, C++ programlama dilinde sınıfların özellikleri içinde dizilerin kullanımı, C++'nın yüksek seviyeli dizi işlevleri ve sözdizimini kullanır. Ayrıca, C++ programlama dilinin sunduğu nesne yönelimli özellikler sayesinde, sınıflar da diğer sınıflar içinde kullanılabilir.


Sınıfların Fonksiyonlarında Dizi Kullanımı

C++ programlama dilinde sınıfların fonksiyonlarında dizi kullanımı oldukça yaygındır. Fonksiyonlar sayesinde sınıfların özelliklerindeki diziler üzerinde değişiklikler yapılabilir, elemanlara erişilebilir ve yeni elemanlar eklenebilir.

Bu fonksiyonların kullanımı sayesinde, sınıf içindeki dizilerin elemanları değiştirilebilir ve bu değişiklikler sınıfın diğer fonksiyonları ya da sınıflar tarafından kullanılabilir. Ayrıca, diziler fonksiyonlarda geri döndürülebilir.

Sınıfların fonksiyonlarındaki dizi kullanımı, kodun yeniden kullanılabilirliğini arttırır. Fonksiyonlar sayesinde, dizi elemanları için tekrarlayan kod satırları yazmaktan kurtulunabilir ve kodun okunabilirliği artar.

Örneğin, bir okul sınıfı sınıfının içinde öğrencilerin notları saklanıyor olabilir. Sınıfın bir fonksiyonu, okulun tüm öğrencilerinin notlarının ortalamasını hesaplayabilir. Bu fonksiyon, sınıfın içindeki dizi elemanlarını kullanarak notların ortalamasını bulur ve geri döndürür.

Bir diğer örnek ise, bir mağazanın müşteri takip sistemi olabilir. Bu sistem, sınıf içindeki bir dizi elemanları kullanarak müşterilerin isimleri, adresleri ve sipariş bilgileri gibi verileri saklar. Bir başka fonksiyon, müşteri bilgilerini listeler ve yeni müşteri bilgileri eklemek için kullanılır.

Fonksiyon Adı Görevi Örnek Kod
notOrtalamasi() Okulun tüm öğrencilerinin notlarının ortalamasını hesaplar. double notOrtalamasi(){ ... }
musteriEkle() Mağazanın müşteri takip sistemi üzerinde yeni müşteri bilgileri ekler. void musteriEkle(){ ... }

Yukarıdaki örneklerde görüldüğü gibi, sınıfların fonksiyonlarında dizi kullanımı oldukça önemlidir. Bu sayede kodun yeniden kullanılabilirliği ve okunabilirliği artar. Kodun kalitesi de bu sayede artar ve hataları önlemek için daha az zaman harcanır.


Sınıfların İçinde Başka Bir Sınıf Kullanımı

Bir sınıfın içinde başka bir sınıf kullanmak, C++ programlama dilinde oldukça sık kullanılan bir yöntemdir. Bu yöntem ile bir sınıfın bir diğer sınıfın özelliklerinden ve fonksiyonlarından yararlanması mümkün olabilmektedir.

Bir sınıfın içinde diğer bir sınıfın kullanımı, genellikle bir başvuru işleyicisi (reference handler) üzerinden gerçekleştirilir. Örneğin:

class SinifB {...};class SinifA {public:  void func() {    SinifB b;    b.x = 5;  }private:  SinifB b;};
  • SinifA: İçinde bulundurduğu SinifB örneği sayesinde SinifB sınıfının özelliklerine ve fonksiyonlarına erişebilir.
  • SinifB: Bir örneği başka bir sınıfta kullanılabilir.

Yukarıdaki örnekte, SinifA sınıfı SinifB sınıfındaki "x" özelliğine erişmek için bir SinifB örneği oluşturur ve bu örneği kendi özellikleri arasında tutar. Bu sayede SinifB sınıfının özellikleri ve fonksiyonları, SinifA sınıfı tarafından kullanılabilir hale gelir.

Böylece, C++ programlama dilinde sınıfların birbirlerinde kullanılması oldukça kolay bir yöntemdir ve kod yazarken zaman ve emek tasarrufu sağlayabilir.


Nesne Yönelimli Programlama Kavramları ve Özellikleri

Nesne yönelimli programlama, programcıların yazılımlarını daha modüler, daha düzenli ve daha kolay kontrol edilebilir hale getirmelerine yardımcı olan bir yaklaşımdır. C++ programlama dilinde, nesne yönelimli programlamaya yönelik kavramlar ve özellikler mevcuttur. Bu özelliklerin temelinde "obje" kavramı yatmaktadır.

Nesne, gerçek dünyadan bir varlığı temsil etmek için kullanılan bir sınıf örneğidir. Sınıflar, Nesne Yönelimli Programlama'nın temel yapıtaşlarıdır. C++ programlama dilinde sınıf oluşturmak için class anahtar sözcüğü kullanılır. Sınıflar, özellikler ve metotlar içerebilir ve bunlar özellikle karmaşık projelerde kod yazmayı daha kolay ve anlaşılır hale getirirler.

Kavram Açıklama
Nesne Gerçek dünya varlıklarını temsil etmek için kullanılan bir sınıf örneği
Sınıf Nesne yönelimli programlamadaki temel yapıtaşı. Özellikler ve metotlar içerebilir
Encapsulation Kodun değiştirilmesinin kontrol altında tutulması için sınırlı erişilebilirlik (access control) sağlar
Inheritance Bir sınıfın başka bir sınıftan özellikler ve davranışlar mirası alması. Bu, kodun tekrarını azaltır ve daha az hata yapmanızı sağlar
Polymorphism Aynı isimle birden fazla fonksiyonun tanımlanabilmesini ve kullanılabilmesini ifade eden bir kavramdır
  • Encapsulation: C++ programlama dilinde sınıflarla birlikte kullanılan bir kavramdır. Sınıflar, özellikler ve metotlar içerebilir ve bu özelliklerin erişilebilirliği sınırlanabilir. Bu sayede, sınıf özelliklerinde yapılacak değişikliklerin kontrol altında tutulması sağlanabilir. Bu da kodun daha güvenli hale gelmesini sağlar.
  • Inheritance: Bir sınıfın, başka bir sınıftan özellikler ve davranışlar mirası almasıdır. Bu sayede, kod tekrarından kaçınılır ve daha az hata yapılır. Örneğin, bir evcil hayvan sınıfı ile köpek sınıfı arasında bir miras alma ilişkisi kurulabilir. Bu sayede köpek sınıfı, evcil hayvan sınıfındaki özellik ve davranışların yanı sıra köpek özelliği olan havlama fonksiyonunu da içerebilir.
  • Polymorphism: Aynı isimle birden fazla fonksiyon tanımlaması ve kullanılabilmesi anlamına gelir. Polimorfizm, sınıf özellikleri ve fonksiyonlarında kullanılabilir ve C++ programlama dilinde oldukça yaygın olarak kullanılan bir kavramdır.

Nesne yönelimli programlama kavramları, C++ programlama dilinde modüler ve düzenli kod yazımını sağlar. Sınıflar aracılığıyla oluşturulan objeler, gerçek dünya problemlerinin bir modellemesini oluşturarak daha kolay anlaşılır ve kontrol edilebilir bir hale getirirler. Ayrıca, nesne yönelimli programlama kavramları, C++ programlama dilinde daha az hata yapmamızı sağlayacak şekilde kodumuzun okunaklılığını da arttırırlar.


Miras Alma (Inheritance)

Miras Alma (Inheritance), nesne yönelimli programlama kavramı içerisinde yer alan bir özelliktir. Bir sınıfın başka bir sınıfın özelliklerini ve yöntemlerini kullanarak yeni bir sınıf oluşturmasıdır. Bu durumda, miras veren sınıf süper sınıf, miras alan sınıf alt sınıf olarak adlandırılır. Bu sayede, alt sınıf, üst sınıfın özellik ve yöntemlerini kullanarak kendi özelliklerini oluşturabilir ve bu şekilde kod tekrarından kurtulunabilir.

Miras alma kavramına bir örnek olarak, araba sınıfından türetilen sedan ve spor araba sınıflarını verebiliriz. Sedan arabalar ile spor arabaların özellikleri farklı olsa da, her iki arabanın da ortak özellikleri olan marka, model, ve motor özelliklerini arabalar sınıfında belirleyebiliriz. Böylece, Sedan ve spor araba sınıflarında, arabalar sınıfından kalıtım ile özellikler kullanılabilir.

Öte yandan, miras alma sayesinde kod tekrarı azaltılırken, sınıf hiyerarşisi de oluşturulabilir. Alt sınıflar, süper sınıfın tüm yöntemlerini kapsar ve kendi özellikleri ile bu yöntemleri kullanabilir. Ayrıca, alt sınıf, türetilen sınıfın kendisine özgü metotlarını da tanımlayabilir.

Sonuç olarak, miras alma, nesne yönelimli programlama içinde kullanışlı bir kavramdır. Bu kavram sayesinde kod tekrarı azaltılır ve sınıf hiyerarşileri oluşturulabilir. C++ gibi birçok programlama dili, miras alma kavramını desteklemektedir ve bu kavramın özellikleri, programlama dilindeki uygulanışı ile her geçen gün gelişmektedir.


Polimorfizm (Polymorphism)

Polimorfizm (Polymorphism), nesne yönelimli programlama dilinde sıkça kullanılan bir kavramdır. Bu kavram, farklı veri türlerinde aynı işlemlerin yapılabilmesini sağlar. Yani, sınıfların aynı işlemi yapabilmesi için farklı veri tipleri kullanabilmesine olanak sağlar.

Bu kavramın kullanımı, farklı durumlarda ve ihtiyaçlarda oldukça faydalıdır. Örneğin, bir sınıfın farklı nesne örneklerinin aynı davranışı göstermesini istediğinizde veya aynı davranış için farklı parametreler beklediğinizde polymorphism kavramı kullanılabilir.

Polymorphism kavramı, sınıflar arasında da kullanılabilir. Böylece, bir sınıfın özelliğini veya davranışını başka bir sınıfın miras alması sağlanabilir. Bu sayede, tekrarlayan davranışlar önlenir ve kodun daha sade hale gelmesi sağlanır.

Polymorphism kullanmanın avantajları:
- Daha az kod tekrarıyla sadeleştirme
- Kodun daha esnek olması
- Kodun daha okunaklı olması
- Daha az hata şansı

Örneğin, bir Hayvan sınıfı düşünelim ve bu sınıfın türlü hayvanlar tarafından kullanılabilecek bir özelliği olsun. Örneğin, tüm hayvanlar ses çıkarabilir. Bir Polymorphism uygulamasıyla bu özellik, Kedi ve Köpek sınıflarının miras almasını sağlayarak tekrar kod yazmak yerine daha sade bir şekilde implemente edilebilir.

class Hayvan {public:    virtual void sesCikar() {        std::cout << "Hayvanlar ses cikarir." << std::endl;    }};class Kedi : public Hayvan {public:    void sesCikar() {        std::cout << "Miyav" << std::endl;    }};class Kopek : public Hayvan {public:    void sesCikar() {        std::cout << "Hav" << std::endl;    }};int main() {    Hayvan* hayvan = new Hayvan();    hayvan->sesCikar();    hayvan = new Kedi();    hayvan->sesCikar();    hayvan = new Kopek();    hayvan->sesCikar();    return 0;}

Bu örnek kodda, Hayvan sınıfının fonksiyonu 'virtual' anahtar kelimesiyle tanımlanarak, alt sınıfların bu fonksiyonları değiştirebilmesine olanak tanınmıştır. Bu sayede, Kedi ve Köpek sınıfları, Hayvan sınıfının özelliklerini devralarak ses çıkarma fonksiyonlarını değiştirebilirler.