C dilini öğrenmeyi bırakıp C++ öğrenmek mantıklı mı?

@İsmail Ördek Hocam peki şu anda C'de gelişmek için yapmam gereken şey tam olarak nedir? Bir dönem üniversitede C dersi aldım. Pointer, structer, fonksiyonlar, file handling gibi temel şeyleri biliyorum. Graphic.h gibi kütüphaneleri mi öğrenmeliyim? Önerdiğiniz bir kaynak var mı?
 
@İsmail Ördek hocam peki şu anda C'de gelişmek için yapmam gereken şey tam olarak nedir? Bir dönem üniversitede C dersi aldım. Pointer, structer, fonksiyonlar, file handling gibi temel şeyleri biliyorum. Graphic.h gibi kütüphaneleri mi öğrenmeliyim? Önerdiğiniz bir kaynak var mı?

Hocam çok anlıyormuş gibi durduysam kusura bakmayın mekatronik okuyan hedefi yazılım/bilgisayar olan bir 10. sınıf öğrencisiyim.
Arduino ve Python ile çalışıyorum ve okulda az bir şey C++ öğrendim öğrenmeye devam edeceğim C hakkında bir bilgim yok Arduino ve mikrodenetleyecilere ilgim var kendi bildiklerimi aktardım kusura bakmayın benim bilgim burada tıkandı Python için seve seve yardım ederim.
 
İkisi de neredeyse aynı dil.
Birini öğrenmeye başlayınca diğerini bırakmış olmuyorsunuz.
C++'dan devam edebilirsiniz.
 
İkisi de neredeyse aynı dil.
Birini öğrenmeye başlayınca diğerini bırakmış olmuyorsunuz.
C++'dan devam edebilirsiniz.
Peki şu konu hakkındaki fikriniz nedir? C'den devam ettigimi düşünürsek:
@İsmail Ördek Hocam peki şu anda C'de gelişmek için yapmam gereken şey tam olarak nedir? Bir dönem üniversitede C dersi aldım. Pointer, structer, fonksiyonlar, file handling gibi temel şeyleri biliyorum. Graphic.h gibi kütüphaneleri mi öğrenmeliyim? Önerdiğiniz bir kaynak var mı?
 
İkisi de neredeyse aynı dil.
Birini öğrenmeye başlayınca diğerini bırakmış olmuyorsunuz.
C++'dan devam edebilirsiniz.
Değil. C structured, C++ object oriented. Aynı kurallar ve beceriler dahilinde hareket etmiyorlar. C++ implicit type casting desteklerken, C'de static type casting neredeyse zorunlu. C++ ayrıca dynamic type casting için destek sunuyor. Yine aynı beceri C'de yok. C, structlarında erişim tanımlayıcıları kullandırtmaz. Bir yapının üyelerini kullanıcıdan gizlemek istiyorsan ayrı yapı kullanırsın. Yine de bunda bile tamamen gizlemek mümkün değil. C'nin ve C++'ın syntax kuralları temel seviyede aynı. Fakat iş ilerledikçe değişiyor.


C:
typedef struct {
    void * arr;
    unsigned int size;
    unsigned short type_size;
} myArr;


myArr init(unsigned int size, unsigned short type_size) {
    myArr arr = {
        malloc(type_size * size),
        size,
        type_size
    };
    return arr;
}

Yukarıdaki structı ele alalım mesela. Eğer bu şekilde tanımlarsak kullanıcı kafası estiği zaman bu containerın sizeını ve türünü değiştirebilir. Bu da bizim açımızdan segmantasyon hatasıyla sonuçlanacağı anlamına geliyor. Bu verileri tutmak için ayrı bir struct oluşturmamız, ondan oluşturulanı buna vermemiz gerekiyor. Ancak bu bile kesin bir çözüm değil, çünkü kullanıcı diğer structı da bulabilir. Ek olarak o veriye erişmeyi bizim içinde zorlaştırıyor. Yada kullanıcıya verinin private olduğunu bildirebiliriz.

C:
struct myArrPrivateData;
typedef struct {
    void * arr;
    struct myArrPrivateData *private;
} myArr;

struct myArrPrivateData {
    /*Private*/
    unsigned int size;
    unsigned short type_size;
};

myArr init(unsigned int size, unsigned short type_size) {
    myArr arr;
    arr.arr = malloc(size * type_size);
    arr.private->size = size;
    arr.private->type_size = type_size;
    return arr;
}

Yukarıdaki şekilde kullandığımızda kullanıcı "private" adında bir değişken bulacak. Bunun elemanlarına erişmemeyi tercih etmek kullanıcıya kalmış olacak. C++ bizim adımıza bu tarz şeylerden kurtuluyor. Ek olarak bu şekilde yazılmış bir yapıda belleğin bir şekilde boşaltılması gerekiyor. Birde destructor yazmamız gerekiyor yani. C ve C++ neredeyse aynı falan değil. Syntax ve bellek yapısının benziyor olması, C++'ın C'den doğmuş olmasından kaynaklanıyor. Ancak beceri ve kurallar bütününde C ve C++ farklı diller.
 
@TheAny dediğim gibi üniversitede bir dönem C eğitimi aldım. Temel şeyleri biliyorum. Şu anda yapmam gereken şey nedir? Kütüphane mi ogrenmeliyim? Ne yapmalıyım? Şurayı takip et dediğiniz kaynak var mı? İnternetteki oynatma listelerinde genellikle hep temel şeyleri öğretip bırakmışlar ama üstüne koymamışlar.
 
@TheAny dediğim gibi üniversitede bir dönem C eğitimi aldım. Temel şeyleri biliyorum. Şu anda yapmam gereken şey nedir? Kütüphane mi ogrenmeliyim? Ne yapmalıyım? Şurayı takip et dediğiniz kaynak var mı? İnternetteki oynatma listelerinde genellikle hep temel şeyleri öğretip bırakmışlar ama üstüne koymamışlar.
Kullandığın donanıma, hedefine uygun dil seçeceksin. Daha sonrasında o dilde ileri düzey programlamaya bakacaksın. Programlamanın mantığını da dilden bağımsız olarak çözmen gerekiyor. Algoritma, yazılım dizaynı gibi detayları öğrenmelisin. İhtiyacın varsa libde öğrenebilirsin ama ihtiyaç dışı lib öğrenmek gereksiz bence. Sonuçta kütüphaneler ihtiyaç üzerine doğmuş belirli bir şeyi yapmaya yardımcı olan şeyler. O yüzden sabah akşam lib öğrenmenin çok bir anlamı yok.
 

Geri
Yukarı