C++ öğrenmek için yeterli mi?

Syntaxı zor değil. Çoğu dille hemen hemen benzer. Zor olan şey C++'ın, doğru kod yazması.

C++ low level bir dil. (C#, Python, Java vb dillere kıyasla) Ayrıca C++ memory safe bir dil değil. Memory safe dediğimiz de, bir dilin kendi bellek yönetimini güvenli* bir şekilde yapmasından bahsediyoruz. Java da, Rust da memory safe dillerdir.

C++'ta bellek yönetiminin güvenliğinden sen sorumlusun. Bir değişken scopeta yaratıldığında, scope bittiğinde ölür. Sen o ölen değişkeni başka bir yerde referans olarak tutuyorsan, bu senin programında undefined behaviour'a sebep olur ve sigseg yada sigabrt yersin. İkisi de programı çökertirler. Segmentation error, işletim sistemi seviyesi hatadır, sigabrt ise C++'ın exception atacağı zaman uygulamaya vurduğu sinyal. (C++ exceptionlarda varsayılan olarak std::terminate çağırıyor, ve std::terminate'in de varsayılan olarak çağırdığı fonksiyon abort())

Yukarıda bahsettiklerim sana çok anlam ifade etmeyebilir, kısaca, dikkatsizsen C++'ta sabah akşam programların çökecek ve bunları ayıklamak uzun sürecek demek oluyor.

C++' ne zor bir dil, ne de kolay bir dil. Eğer arkasındaki konseptleri öğrenmezsen kesinlikle acı çekeceğin, zorlanacağın bir dil ama.

*: Bellek yönetimi her zaman runtime dinamik olacak diye bir şey yok. Rust'ı memory safe kılan mesela, ownership ve borrow checker.


Kitapları boş ver. C++ dökümantasyonu aradığın şey. Temel programlamayı öğrendikten sonra C++'ta bir şey öğrenmek istiyorsan, dökümantasyon kitaplardan daha yararlı.


C#'ta header dosyaları vb şeylere sahip. Tümleşik ne demek? Bütün derlenen programlar belli bir sıra ile derleniyor zaten?
C++ 'da kullandığın fonksiyonları header dosyasında isim ve yöntem olarak tanımlaman gerekiyor. Derlendiğinde hepsini tek bir cpp dosyası olarak görüyor ve üst satırdan en alt satıra doğru derleyerek çalıştırıyor. Mesela kullanacağın fonksiyon tanımı altta kalıyorsa C++ o fonksiyonu görmüyor. Header dosyaları "buraya bu fonksiyon gelecek, merak etme ben içerde bunu tanımladım" diye derleyiciyi uyarıyor.
C#'ta ise fonksiyonu scope un herhangi bir yerinde tanımlayabilirsin, sıkıntı olmayacaktır.
 
C++ 'da kullandığın fonksiyonları header dosyasında isim ve yöntem olarak tanımlaman gerekiyor. Derlendiğinde hepsini tek bir cpp dosyası olarak görüyor ve üst satırdan en alt satıra doğru derleyerek çalıştırıyor. Mesela kullanacağın fonksiyon tanımı altta kalıyorsa C++ o fonksiyonu görmüyor. Header dosyaları "buraya bu fonksiyon gelecek, merak etme ben içerde bunu tanımladım" diye derleyiciyi uyarıyor.
C#'ta ise fonksiyonu scope un herhangi bir yerinde tanımlayabilirsin, sıkıntı olmayacaktır.
C++'ta da, C# gibi class scope'unda tanımlarsan, hangisinin önce geldiğinden bağımsız olarak çalışacak. Forward declaration yapmıyoruz her zaman.

Eğer global scope'ta böyle yaparsak, evet, hata;
C++:
auto bar() -> void {
    foo(); // error: 'foo' was not declared in this scope.
}

auto foo() -> void {
    std::cout << "foo" << std::endl;
}

Class'ta ise sorun yaratmayacak.
C++:
class baz {
   public:
   auto bar() -> void {
       foo(); // ok, output: foo
   }
   auto foo() -> void {
       std::cout << "foo" << std::endl;
   }
};
 
Syntaxı zor değil. Çoğu dille hemen hemen benzer. Zor olan şey C++'ın, doğru kod yazması.

C++ low level bir dil. (C#, Python, Java vb dillere kıyasla) Ayrıca C++ memory safe bir dil değil. Memory safe dediğimiz de, bir dilin kendi bellek yönetimini güvenli* bir şekilde yapmasından bahsediyoruz. Java da, Rust da memory safe dillerdir.

C++'ta bellek yönetiminin güvenliğinden sen sorumlusun. Bir değişken scopeta yaratıldığında, scope bittiğinde ölür. Sen o ölen değişkeni başka bir yerde referans olarak tutuyorsan, bu senin programında undefined behaviour'a sebep olur ve sigseg yada sigabrt yersin. İkisi de programı çökertirler. Segmentation error, işletim sistemi seviyesi hatadır, sigabrt ise C++'ın exception atacağı zaman uygulamaya vurduğu sinyal. (C++ exceptionlarda varsayılan olarak std::terminate çağırıyor, ve std::terminate'in de varsayılan olarak çağırdığı fonksiyon abort())

Yukarıda bahsettiklerim sana çok anlam ifade etmeyebilir, kısaca, dikkatsizsen C++'ta sabah akşam programların çökecek ve bunları ayıklamak uzun sürecek demek oluyor.

C++' ne zor bir dil, ne de kolay bir dil. Eğer arkasındaki konseptleri öğrenmezsen kesinlikle acı çekeceğin, zorlanacağın bir dil ama.

*: Bellek yönetimi her zaman runtime dinamik olacak diye bir şey yok. Rust'ı memory safe kılan mesela, ownership ve borrow checker.


Kitapları boş ver. C++ dökümantasyonu aradığın şey. Temel programlamayı öğrendikten sonra C++'ta bir şey öğrenmek istiyorsan, dökümantasyon kitaplardan daha yararlı.


C#'ta header dosyaları vb şeylere sahip. Tümleşik ne demek? Bütün derlenen programlar belli bir sıra ile derleniyor zaten?
C++'ın en büyük handikapı header dosyaları ile çalışması, yani C# gibi tümleşik değil, belirli bir sıra ile derleniyor. Bu yüzden belirli kuralları var ancak yapısını öğrendikten sonra çok keyifli bir dil çünkü bilgisayar dünyasının "God Mode" u sayılır kendisi.
Biraz geç cevap verdim. Dediklerinizden biraz anladım .
C++'ı seçmenizin özel bir sebebi var mı? Eğer öğrenecekseniz bu siteyi öneririm.
Dediğim gibi Programlarlar ve projeler oyunlar vs.
C++ 'da kullandığın fonksiyonları header dosyasında isim ve yöntem olarak tanımlaman gerekiyor. Derlendiğinde hepsini tek bir cpp dosyası olarak görüyor ve üst satırdan en alt satıra doğru derleyerek çalıştırıyor. Mesela kullanacağın fonksiyon tanımı altta kalıyorsa C++ o fonksiyonu görmüyor. Header dosyaları "buraya bu fonksiyon gelecek, merak etme ben içerde bunu tanımladım" diye derleyiciyi uyarıyor.
C#'ta ise fonksiyonu scope un herhangi bir yerinde tanımlayabilirsin, sıkıntı olmayacaktır.
Bu mesajı çok az anladım. Kelime bilmiyorum hocam header dosyası ve scope nedir?

Hepinizi cevaplayamıyorum ama bilgileriniz ve de zaman ayırdığınız için teşekkürler.
 
Merhaba, C++ hakkında hatta hiçbir yazılım dili hakkında bilgim hiç yok. Yani tam anlamı ile sıfırdan başlıyorum. BTK Akademi diye devletin bir sitesi varmış. Ona kayıt olacağım ve codeacademy gibi sitelerden destekte alarak en azından C++ hakkında temel ve bir tık ileri (orta seviye) öğrenebilir miyim? Kitaplardan da destek alacağım. Ama aklımda bir soru var. Çoğu insan C++ zor olduğunu söylüyor. Daha kolay yazılım dillerinden mi başlamalıyım?
Yazılıma bir dil öğrenme amacıyla başlama:
 
Başta İngilizce ve mümkünse temel lise matematiği kısmını halledin, daha sonra da algoritmayı öğrenip bol bol algoritma çalışması yapın. Daha sonra da bence Harvard CS50x ile başlayın. Bunları yaptıktan sonra hangi dil ile başlayıp ne öğrendiğiniz fark etmiyor, HTML ve CSS ile de Py ile de C ile de başlayan mevcut.
 
Son düzenleyen: Moderatör:

Technopat Haberler

Geri
Yukarı