C++ Struct Kullanımı (C++ Yapılar)

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Master The Yoda ⚔
Seçkin Üye
Katılım
30 Kas 2017
Mesajlar
428
Çözümler
1
Tepki puanı
49
Ödüller
5
8 HİZMET YILI
memoryhackers.org-114669-pointer1212.png

Data Structures & Algorithm
(Veri Yapıları ve Algoritmalar) dersinde öğrendiğim herşeyi bir yazı dizisi halinde getirmeye an itibari ile karar verdim. Tabi ki her ders için birer yazı yazmaktansa, öğrendiğim her bir kavramı kullanabileceğimiz diğer kavramlar ile birleştirerek sizlere sunacağım.

İlk derslerde öğrendiğim kavramları günümüz yüksek seviyeli dilleri (Java ve C#) ile karşılaştırınca aslında amaçsız bir iş içinde olduğumuzu düşünmüştüm. Çünkü bu dillerde rahat bir şekilde istediğimiz classları, içlerinde propertyler ve methodlar olacak şekilde rahatça yazabiliyor ve hata alsak bile kolayca düzeltebiliyoruz. Gel gelelim benzer yapıyı C++ da struct'lar ile yapmaya çalışıyor ve ne kadarda ilkel olduğunu görüyoruz. Aslında bu noktada düşündüğüm tek şey şöyle oldu ;



Yüksek seviyeli dillerde kolayca yazmamızı sağlayan mimarinin altında yatan gerçekler ve zoru gördükten sonra kolay herşeyin daha anlamlı gelmesi
Belki olaya olması gerektiğinden fazlaca iyi yönden baktık, ama en azından artık yapacağımız işi biraz tanıdık.

Lafı fazla uzattık gibi, artık konumuza ve hazırladığım ufak senaryoya başlayabiliriz.

C++ sonrasını tamamiyle unutalım
Evet tıpkı yukarıda dediğim gibi artık C# ve Java elimizde yok ve C++ da kullandığımız temel veri tipleri yani int, float, string vs.'den başka elimizde bir tip yok ancak bizim yazacağımız öğrenci programı içinse öğrenciler için kullanabileceğimiz bir veri tipine ihtiyacımız var bu arada farkındamısınız senaryomuzunda öğrenci programı olduğunu söylemiş bulundum :)

Temel olarakda bir öğrencinin numarasını ve aldığı puanı içinde tutacak bir yapıya ihtiyacımız var. Tıpkı yüksek seviye dillerde bir class yazarmış gibi aşağıdaki kodu aynen C++ da yazıyor ve uygulama içersinde kullanacağımız structımızı tanımlamış oluyoruz.

Öğrenci Struct Yapısı

Kod:
struct Ogrenci{
    int No;
    int Puan;
};


Burda dikkat etmemiz gereken en önemli şey ise structın tanımlanmasında bizden istenen syntax kuralına dikkat etmemiz olacaktır.

Birde main methodumuzu yazalım ve içersinde 2 tane öğrenci tanımlayalım, hemen ardından numaralarını ve puanlarını girelim. Yalnız bundan önce uygulayacağımız senaryo gereği öyle bir methodumuz olsunki biz parametre olarak ona Ogrenci yollayalım o da bilgileri ekrana yazsın.

Parametre ile çalışan method

Kod:
void ParametreIleYazdir(Ogrenci o)
{
    printf("\n%d. nolu ogrencinin puani : %d\n",o.No,o.Puan);
}


Neden pointer kullanmalıyız ?
Yukarıda parametre olarak aldığı öğrencinin bilgilerini ekrana yazdıran bir method yazdık fakat bu method bizim için performanslı olmayacaktır. Çünkü biz bu methodu çağırırken elimizde varolan bir öğrenciyi parametre olarak yollamış olsakda, içersindeki bilgilerin aynı olduğu bir öğrenci daha memory de yaratılacak yani bit by bit olarak tekrar oluşturulup methoda bu öğrenci verilecek. Bunun anlamını method içersinde gelen öğrencinin herhangi bir değerini değiştirmenize rağmen yolladığımız öğrencide aynı değişikliliğin yansımamış olduğunu inceleyerek öğrenebilirsiniz.

Başlığı yazdık fakat henüz ne yapcağımızdan bahsetmedik. Aslında amacımız yukarıda yazdığımız şeyi engellemek. Yani methodu çağırırken söz konusu öğrencinin kopyalanması yerine, direk bu öğrenciye ulaşmak olacaktır. Bunun içinde method parametre olarak bir öğrenci değil, öğrenciye ait bir adres alması olacaktır.

Diğer bir değişle parametre olarak elimizdeki öğrencinin adresini yollayıp, method içersinde adresi verilen öğrenciye ulaşıp bilgileri yazdırmak olacaktır. Tıpkı aşağıdaki kod gibi ;

Pointer ile çalışan method

Kod:
void PointerIleYazdir(Ogrenci* o)
{
    printf("\n%d. nolu ogrencinin puani : %d\n",o->No,o->Puan);
}


Bahsettiğim senaryoyu yukarıdaki method tam istediğimiz gibi karşılayacaktır. Parametre olarak aldığı ogrencinin adresinden, öğrenciye ulaşıp içersindeki No ve Puan bilgilerini ekrana yazdıracaktır. Böylece methoda bir öğrenci yollamamış olacağız ki bu da uygulamamızdaki performansı düşürmeyecektir.

İlkel bir eşitlik bulduk sanırım :)

Pointer = Performans
Main methodumuzu yazalım
Elimizde 1 struct ve bunun üzerinde her ne kadar aynı işlemi gerçekleştirsede birinin daha performanslı olacağı 2 adet method var. Şimdi main methodumuzu yazalım ve elimizdeki yapıları kullanalım.

POZ2mN.png



Uygulamamızı çağırdığımızda aşağıdaki gibi bir ekran ile karşılacağız.

1.png
 
Onaylı Üye
Katılım
29 Ara 2016
Mesajlar
131
Tepki puanı
7
9 HİZMET YILI
visual studio 2017 var bende ama kullanamıyorum youtubedekı kodları yazıyorum olmuyor sebebı nedır bılgıl bırısın yardım edermısın
 
Master The Yoda ⚔
Seçkin Üye
Katılım
30 Kas 2017
Mesajlar
428
Çözümler
1
Tepki puanı
49
Ödüller
5
8 HİZMET YILI
Kullanmasını biliyor musunuz? 2017 VS'nun getirdiği artılar ;

+) c++ 11, 14, 17 standartlarına tam uyum.
+) clang tamamen oturtulmuş.
+) xcode projeleri artık direkt visual studio solutions'a çevrilebiliyor(convert)
+) apache cordova desteği tam oturtulmuş.
+) .net core desteği tam anlamıyla rtm gelecek.
+) universal app desteği genişletilmiş baya.
+) android için gradle desteği gelmiş.
+) javascript, nuget, python tarafları yine elden geçirilmiş.
+) en sonunda klasör olarak proje aç gelmiş.
+) daha bir çok özellik.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst