C++ Merhaba Dünya Kodu nasıl çalışıyor?

Endorfin35+

Kayıtsız Üye
Katılım
1 Mayıs 2020
Mesajlar
4,201
C++ konusunda kendimi geliştirmek istiyorum. Aşağıda yazan "merhaba dünya" kodunun nasıl çalıştığını tam olarak anlamak istiyorum.
C++:
#include <iostream>

using namespace std;


int main()
{
    cout << "Merhaba Dunya" << endl;
}

1618739499895.png


1. Koda iostream ekliyorum. iostream veri giriş çıkış işlemlerini yöneten bir sınıfmıdır yoksa kütüphanemidir? nedir? cout, end1 iostream ın fonksiyonlarımıdır?

2. Namepsace std nereden geliyor. iostream yerleşik bir sınıf olduğu için stdandart kelimesinden std mi geliyor?

3. using namespace std yerine komutların başına std::cout ekleyerek kullanım arasında nasıl neye göre bir tercih yapılmalı..

4. printf ile cout birbirine alternatifmidir? günümüzde printf kullanımı terk mi edildi?

5. cout kullanırken << işaretleri ne anlam ifade ediyor. neden cout("xx") değilde cout <<"xx" << gibi bir kullanım var. Özel bir durummu var?
 
Elimde 800 sayfalık güzel bir c/c++ kitabı var. C dilinde bir acemi olarak aklıma gelen sorunların cevabını kitabın son sayfalarında buldum. Demekki bende bir terslik var... Sondan başlamayı seviyorum :)

Gelelim sorularımın cevaplarına. Dediğim gibi acemiyim yanlışım varsa düzeltin. (@taydin )

1. iostream c++ a özgü veri transferinden sorumlu bir sınıftır. cout cin nesneler ekrandan belleğe, bellekten ekrana veri transfer eder.

4. printf c dilinin bir fonksiyonudur ve stdio.h başlığı ile kullanılır. printf komutunu c++ dili desteklemesine rağmen cout komutunu c dili desteklemez. Kullanıcı açısından bir fark yoktur. iki komutta kullanıcıya çıktı verir. Fark programlayıcı acısındandır. Hangi komutun kullanılacağına programlayıcı karar vermelidir. Benim hedefim c++ öğrenmek olduğu için cout komutunu benimseyeceğim.
Ayrıca şu linkte biraz daha detay var : https://stackoverflow.com/questions/2872543/printf-vs-cout-in-c

2-3. Namespace std standart tan geliyormuş. C++ içinde stnadart olarak bulunan tüm sınıf ve fonksiyonlar std adlandırması bölgesinde yer alıyor. Bu nedenle standart olan bir fonksiyon veya sınıf kullanırken std adlandırma bölgesini kullanıyoruz.

Örnekleyelim :

C++:
#include <iostream>

using namespace std;

namespace benim_alan
{
    string isim="Mehmet";
}
int main()
{
    cout << "Merhaba "<< benim_alan::isim << endl;
}

kendimizde özel bir isim alanı oluşturduk. kendi isim alanımızda isim adlı değişken tanımladık. Sonra kullanırken kendi isim alanımıza atıfta bulunarak benim_alan::isim şeklinde değişkeni kullandık.

using namespace ile şu şekilde de kullanım mümkün. sanıyorum isimlerde çakışma olmadığı sürece bir sorun yok gibi...
C++:
#include <iostream>

using namespace std;

namespace benim_alan
{
    string isim="Mehmet";
}
using namespace benim_alan;

int main()
{
    cout << "Merhaba "<< isim << endl;
}


5. iostram veri transferi yapan bir sınıftı. cout kullanımında "<<" işaretleri ise transfer yönünü gösteren işaretler.

cout << "Merhaba" // merhabayı ekrana gönder. << işaretleri ok işareti gibi içeriği komuta yönlendiriyor.
cin >> a // ekrana girilen bilgiyi a değişkenine aktar.
 
Son düzenleme:
namespace konusunda bilerek bir sorun yarattım. Acaba son atanan değermi geçerli olur dedim ama derleyici doğrudan hata verdi. Demekki çakışma yaratmamak lazım.

C++:
#include <iostream>

using namespace std;

namespace benim_alan
{
    string isim="Mehmet";
}



using namespace benim_alan;

string isim="Ahmet";

int main()
{
    cout << "Merhaba "<< isim << endl;
}

1618744874731.png
 
namespace kullanımını açıklayan örnek:
C++:
// iostream bellek-ekran arası veri transferi sağlayan bir sınıftır.
// ekrana çıktı almak gerektiğinde kodun başına eklenmelidir.
#include <iostream>

// C++ standart sınıf ve fonksiyonları std adlandırma alanı bölgesinde yer alır ve bu foknsiyonları kullanmak için
// adlandırma alanı adına atıfta bulunulması gerekir.
// using namespace std kullanımı iostream sınıfının nesneleri olan cout end1 komutlarının başına
// std:: eklememek için kullanılır. using namespace std komutu kullanılmaz ise komutlar std::cout şekilnde kullanılır.
using namespace std;

// istenir ise kendimize özgü bir adlandırma alanı tanımlayabiliriz. adlandırma alanının kapsadığı
// nitelikler yine adlandırma alanı adına atıfta bulunularak kullanılır.
namespace benim_alan
{
    string isim="Mehmet";
}

namespace senin_alan
{
    string isim="Hasan";
}

// adlandırma alanında kullanılan adlandırmalar sonradan tekrar kullanılır ise
// using namespace benim_alan; kullanımı çakışma yaratır. ve derleyici hata verir.
// sonradan ayı adlandırma kullanılmayacak ise using namespace benim_alan; kullanılabilir.

// aynı ad ile yeniden değişken tanımlayalım. 
string isim="Ahmet";

int main()
{
    cout << "Merhaba "<< benim_alan::isim << endl;
    cout << "Merhaba "<< senin_alan::isim << endl;
    cout << "Merhaba "<< isim << endl;
}

// Merhaba Mehmet
// Merhaba Hasan
// Merhaba Ahmet
// çıktısını alırız isim değişkeni üç ayrı bölgede aynı isim ile kullanılmasına rağmen farklı değerler taşır.
// namespace kullanımın amacı bu adlandırmadan kaynaklı çakışmaları önlemektir.
 
C deki printf dan cout'a geçişin temel nedeni, tip güvenliği. printf'da bir format string içinde her argümanın tipini belirtiyorsun sonra da argumanı doğru sırada belirtiyorsun. Hata yapma ihtimali ve alternatifi çok ve hata olunca da ya saçma sapan birşey yazılıyor ekrana yada program göçüyor. cout kullanırsan, herhangi bir format string yok. Her verilen argümanın tipi derleme anında belli ve ona göre doğru bir şekilde işleniyor.

C++ da STL (Standart Template Library) çok yaygın olarak kullanılmıyor. Tamam tip güvenliği konusunda büyük avantajlar var, ama yapı olarak oldukça karmaşık, kaynak kodunu okumak mısır piramitlerindeki hieroglif'leri okumaktan daha zor, her bir sınıfın ne yaptığını bilemiyorsun, bunun da performansa nasıl bir etkisi olacağını kestiremiyorsun. Bir de tamamen "template" bazlı olduğu için, kodda bir derleme hatası varsa, bu hatanın sebebinin ne olduğunu anlamak oldukça zor oluyor. Template ile oluşturulmuş STL değişkenlerinin veri tiplerine bakınca yüzlerce karakterden oluşan string'ler olabiliyor ve hatayı artık analiz ederek değil, deneme yanılma ile bulmak daha çekici geliyor :)

STL olmadan da C++, C ye göre çok büyük avantajlara sahip. O yüzden bence STL yi boşver ve C++ diğer özelliklerine odaklan:

1) OOP, Encapsulation, Abstraction, Inheritance, Polymorphism.

2) Tip güvenliği

3) Templates

4) Operator overloading.

5) Exception handling

Bununla ilgili bir konu da açmıştım ben

 
Stl neymis yaw. Onuda simdi duydum benim kitap hic bahsetmemis. Simdi aklima takildi bakiyim neymis :)
 
Sende hangi kitap var? Kitapların iyileri burada:


İyileri ancak amazon'dan sipariş etmen gerekiyor, Türkiye'de bulunabilecek kitaplar değil.
 
Bende aşağıdaki kitap var. Bir arkadaşım hediye etmişti.


İngilizce kitap zorlar beni. Konuyu anlamak ile yazıyı anlamak arasında kaybolurum :) Biraz ilerleyeyim çok ihtiyaç duyarsam sipariş ederim.

Senin açtığın konulara göz atıyorum. zorluk seviyesi alıştırmalarının üzerinden geçeceğim. Dur abi daha merhaba dünya yazdım sadece :) Biraz ısınayım konuya :cheeky2:
 
C++ da int turunun kapasitesi 32/64bit islemciye gore degisir yaziyor. :cheeky2:

Kafam karisti ne alaka?

32 bit islemcide 2byte olan int
64 bit islemcide neden 4 byte oluyor...
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,864
Mesajlar
100,018
Üyeler
2,485
Son üye
viesva

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top