c ye nesneye dayalı programlama nın entegre edilmesiyle oluşan dildir. c ye göre çok daha güvenilir kod yazma olanağı sağlar. büyük programların yazılmasında ve grup halinde program yazılmasında sayısız yararı vardır. programlama açısından bir dönüm noktasıdır.
günümüzde oluşan java, .net, php gibi programlama dillerinin temelini oluşturan, bu dilleri öğrenmek isteyenlerin mutlaka öğrenmesini tavsiye ettiğim nesne yönelimli programlama dili
geliştiricisi bjarne stroustrup'un "şimdiye kadar c++'tan daha iyi bir dil tasarlanmadı" cümlesine sebep olan dil. çoklu türetmeyi sentaks düzeyinde destekler, tüm sınıfların javadaki gibi tek bir object'ten türetilmesi diye bir saçmalığı içermez.
nesneye dayalı programlamada işaretçileri kullanma becerisi isteyen, javadan da bu yönüyle ayrılan dil. gerçek hayattaki nesneleri düşünerek, kullanılacak nesnelere sınıf yaratmak gerektiren ve bu yönüyle c dilinden ayrılan dildir.
sentaks yönünden en zor programlama dilidir. isminide, ++* operatörününü c harfine*, postfix(sonek) olarak vererek hem espirili hem de akılcı bir düşünce ile almıştır.
dil bilgisi veya cümle bilgisi tamlamalarının yerine uyduruk sentaks kelimesini kullanmayı tercih edenlerin hayran olduğu programlama dili. fena dil değildir; öğrendikten sonra bağımlılık yapar.
bilgisayar mühendisliği dışındaki mühendislik sınavlarında uygulamalı değil de yazılı olarak sınavı yapılabilen, sınav kağıdında komik görüntüler oluşturan programlama dili.
sadece encapsulation ve türetilmeyen nesneler, template'ler için kullanılıyorsa (çok fonksiyonlu bir kullanım olmadığı sürece, inheritance kullanılıyorsa yazının devamını okumayınız bile hatta) alternatif olarak c'yi düşünmek söz konusu olabilir. ayrı c dosyalarında static fonksiyonlar ve değişkenler kullanarak ilkel bir encapsulation uygulanabilir, struct yapılarına fonksiyon işaretçileri gömülerek nesne metotları gerçeklenebilir (constructor ve destructor'ları da elle gerçeklemek gerekir tabi), makrolar ile birden fazla türde parametre alan ve dönen fonksiyonlar oluşturulabilir (template). exception'ları bir hata fonksiyonuna bağlayabiliriz.
ama bırakalım bunlarla derleyici kafa yorsun diyorsak c++ derleyicimiz baş ucu aracımız olacaktır.
generic programalanın onemini javadan yıllar once keşfetmiş dil.
javadan once çıktığı için dğeil java yıllarsa sonra generic classları yeni getirdiği için
c++ ile yazılmış bir mekanik öğrenme kütüphanesinin kullanma kılavuzunun "why c++?" bölümünün ilk cümlesi: "i hate c++."
işte bu da dünyanın gerçeğidir. birileri bizi c++ ile kod yazmaya zorluyor. "c++ kötü ıyk" dediğimizde ise önümüze yaklaşım olarak ondan hiçbir farkı olmayan java atılıyor. birileri bu işten paralar kazanıyor, biz ise temelde basit olması gereken nesne yönelimli programlama için "keyword"lere boğulmuş dillerde kod yazacağız diye ter döküyoruz. bir satırlık işi on satırda yapıyor, bir saniyede derlenecek kodu bir dakikada derliyoruz.
uyanın ey yazılımcılar! silkinin ve kendinize gelin! kral çıplak! bu dünyada pascal vardı, eiffel vardı. kim unutturdu bunları bize? düşünün bunları. gelecek farklı olabilir.
c'nin bir üst versiyonu yorumları kanımca yanlış yorumlardır.c dili rüştünü bir hayli ispatlamış bir dildir, öyle ki koca linux bu dilde yazılmıştır.bu bir. c++ nesneye yönelimli, c ise yapısal bir dildir dolayısı ile felsefeleri farklıdır bu iki.bir bilgisayar mühendisi kesinlikle c bilmelidir bu da üç.
nesne tabanlı programlamanın temelidir. bu dili öğrenmek biraz zaman ve bayağı bir emek gerektirir. öğrendikten sonraysa c sharp, java, smalltalk gibi diğer object oriented programlama dilleri çok daha rahat öğrenilebilir.
int choice;
cin>>choice;
switch(choice)
{
case 1: addstr(strings); break;
case 2: sortstr(strings); break;
case 3: removestr(strings); break;
default: error(); break;
}
cout<<endl<<endl<<"here are your strings: "<<endl;
kullanmayı beceremeyenlerin ve kullanım amacını anlamayanların nedense çok bok attığı dil. anlayamadığım bir biçimde kimi kimselerin hala c# ve java ile karşılaştırdığı(!) dil. kimlerinin inatla nesne yönelimli programlamanın temeli falan dediği dil. en başta bundan başlayalım. kardeşim salt nesne yönelimli bir dil değildir bir kere çok sayıda programlama tekniğine destek verir c++. aslına bakılırsa bu yüzden iyi bir nesne yönelimli dil sayılmaz. c++ daha çok sistem yazılımları ve hesap yükü ağır yazılımların daha iyi geliştirilmesi için ortaya atılmıştır. burada anlaştık mı? bu dediğim konularda hanginize eiffel'ler,c#'lar, java'lar yardım ediyor? şimdi bana bunları kullanıp deli performans alıyorum demeyin sakın. diyebilseniz zaten adamlar catıa'yı, ansys'i, solidworks'ü dediklerinizle yazarlardı. güncel donanımları bile kastıran oyunları dediklerinizle yazarlardı. birçok gömülü yazılım geliştiren kimi kimse elini sürmezdi c++'a. (c cpp farkını biliyorum merak etmeyin) amma velakin performanstan ziyade ben hızlı ürün geliştirmek istiyorum kardeşim diyorsanız tabiki gidin c#, java, vb kullanarak yazın. ama lütfen sapla samanıda birbirine karıştırmayın. o yüzden ne yapmıcaz? yok yere bok atmıcaz.
çok şahane bir programlama dili olmasına rağmen "diğerlerinden <u>çok daha</u> hızlı" olduğu 90larda kalmış artık pek de geçerli olmayan bir iddiadır. şurada konuyla ilgili bir araştırma çalışması bulunuyor
(bkz: http://scribblethink.org/...)
şöyle de bir karşılaştırma var (bkz: http://www.tommti-systems.de/...) ki burada da aradaki hız farkının pek de fazla olmadığı gösterilmiş. ek olarak c++'ın asıl bellek yönetiminde daha başarılı olduğu da görülebiliyor. bu da gayet doğal (bkz: garbage collection)
üstelik bu rakamlar gömülü sistemler için özel olarak ayarlanmış projeler için bir karşılaştırma da sunmamış.
gömülü sistemlerde sıkça kullanılmasının nedeni (ki aslında bu da yavaş yavaş 90larda kalan bir iddiaya dönüşüyor ya neyse)
- düşük seviyeli programlamaya daha rahat olanak vermesi (haldır huldur pointer kodlama imkanı)
- programcıyı daha az kısıtlaması (haldır huldur struct, multiple inheritance, fonksiyon, enum cart curt kodlama imkanı)
- garbage collector bulunmaması ile belleğe daha büyük hakimiyet
kanımca c++'ın asıl avantajı programcıyı daha rahat bırakmasından kaynaklanıyor. gömülü sistemler için alt düzey programlamaya diğerlerinden daha yatkın olması da cabası. gömülü yazılım kodlarken zaten bir sürü alt düzey mambo cambo işle uğraşan programcının oturup bir de her yeni metod için nesneye dayalı mantığı korumaya çalışması pek olur iş değil zaten.