C'den C++'a geçiş zor mu?

muslimlinuxuser

Femtopat
Katılım
10 Ağustos 2023
Mesajlar
85
Daha fazla  
Cinsiyet
Erkek
Merhaba, C biliyorum. Düzeyim iyi yetiyor hamdolsun GUI ile uğraşacağım. C++ daha uygunmuş C'den C++'a geçiş zor olur mu? Hiç nesne yönelimli dil bilmiyorum. Hep Assembly, C gibi Low level dillerle takıldım. GUI için C de mi kalayım C++ a mı geçeyim?
 
C bilen biri için C++'a geçince alışmanız gereken tek şey nesne yönetimi kısmı oluyor. Nesne yönetimi için biraz pratik yaparak alışabiliyorsunuz. Tutorialspoint sitesini öneririm.
 
C bilen biri için C++'a geçince alışmanız gereken tek şey nesne yönetimi kısmı oluyor. Nesne yönetimi için biraz pratik yaparak alışabiliyorsunuz. Tutorialspoint sitesini öneririm.
Assembly bilen biri zorlanmaz herhalde.
Eğer kodun çalışma mantığını kavradıysanız zorlmanmazsınız. En azından bende öyle olmuştu:)
Evet C'nin yazım kurallarını biliyorum. Ama GUI ile uğraşmak için C++'a geçmek mantıklı mı emin olamadım.
 
C'de structurları kullandıysan, C++'a da alışman o kadar uzun sürmez. Temel fark structerların içerisindeki nesnelerin erişilebilirlikleriyle ve metodlarıyla ilgili.

Aşağıdaki C örneğine bakalım mesela; Point adında bir structur var elimizde. Bunu kullanmak için iki metod tanımlamışız. Biri noktaları tanımlamaya, diğeri yazdırmaya yarıyor. Bunun aynısını C++'ta aşağıdaki diğer örnek gibi yapardık.

Not: Daha fazla detay söz konusu normalde, aşırı temele indirgeyerek yapılan bir açıklama bu. Access specifierlar, operator overloadları, function overloadları, inheritance ve multi inheritance, overriding ve shadowing gibi pek çok olay daha söz konusu.
C:
#include<stdlib.h>
#include<stdio.h>

typedef struct {
    int x;
    int y;
} Point;

Point newPoint(int x, int y) {
    Point p = {
        x,
        y
    };
    return p;
}

void print(Point p) {
    printf("x: %d, y:%d", p.x, p.y);
}

int main(int argc, char** argv) {
    Point p = newPoint(3, 5);
    print(p);
    return 0;
}
C++:
#include <iostream>

class Point {
    public:
    int x;
    int y;
    Point(int x, int y) : x(x), y(y) {}
    void print() {
        std::cout << "x: " << x <<  " y: " << y << std::endl;
    }
};


int main(void) {
    Point p(3, 5); 
    p.print();
    return 0;
}
 
Allah razı olsun uğraştığınız için C++ kodu kısaltıyor gibi C++'a geçeceğim.
Kodu kısaltıyordan ziyade yapısal olarak bir farklılık söz konusu. C structured bir dil. Yapılar kullanıyor ama bu yapılardan üretilen nesneler için metodları yapının içine değil, dışına yazıyorsunuz. Yapısal olarak C'de veri gizleme bulunmaz. Oluşturulan metodlar eğer bir değişiklik yapmak isterse pointer kullanır. C'de fonksiyon aşırı yükleme bulunmaz. C++'ta bir fonksiyonun parametrelerini değiştirerek aynı isimde birden fazla fonksiyon elde edebilirsin. Çoook daha fazla fark var böyle. Bu sadece basit bir örnek.

İyi bir araştırma yapmanızı öneririm.
 
Merhaba, C biliyorum. Düzeyim iyi yetiyor hamdolsun GUI ile uğraşacağım. C++ daha uygunmuş C'den C++'a geçiş zor olur mu? Hiç nesne yönelimli dil bilmiyorum. Hep Assembly, C gibi Low level dillerle takıldım. GUI için C de mi kalayım C++ a mı geçeyim?
C++'da nesne yönelimi kullanmanıza gerek yok, kullanımı da önerilmez zaten. Ama genel olarak zorlanmanız mümkün tabii.
 
C'de fonksiyon aşırı yükleme bulunmaz. C++'ta bir fonksiyonun parametrelerini değiştirerek aynı isimde birden fazla fonksiyon elde edebilirsin.
Gömülü sistemler de bu kısım sıkıntı mesela. STM32 ile CMSIS paketi kullanarak çalışırken Interrupt fonksiyonları tanımlı geliyor. Eğer bu fonksiyonları C++ ile kullanırsanız fonksiyonu extern "C" {....} içerisine yazmanız gerekiyor. Yoksa Interrupt fonksiyonu her çalıştığında Hard_Fault_Handler denilen fonksiyona atılıyorsunuz (bu fonksiyonun içinde sadece while(1) var.) Derleyici aşırı yüklemeden emin olamıyor sanırım.
 
C++'da nesne yönelimi kullanmanıza gerek yok, kullanımı da önerilmez zaten. Ama genel olarak zorlanmanız mümkün tabii.
C++'ta nesne yönelimi kullanılmasına gerek mi yok? C++'ta io bile oop ile gerçekleşiyor.

cout bir nesne. std::ostream türüne ait bir nesne. << ise bit shifting operatorünün aşırı yüklenmiş hali. Hatta std::operator<<(std::cout,"Hello World!"); ile çıktı alınabiliyor*. integral girdiler için std::cout.operator<<(10); şeklinde bile çıktı alınıyor**. Gelelim diğer sınıf mevzularına.

Multi threading C++'ta bir nesne yönelimli programlama türü. Multi processing aynı şekilde. Eğer microsoft'un hesap makinesinin source code'una bakarsak calculatormanager adında bir sınıfları olduğunu görebiliriz örnek olarak. Daha fazla sınıf da söz konusu. Bu sınıflar statik sınıf değil. Sadece metodları tutsunlar diye kullanılmıyorlar yani;
Yine Nvidia TensorRT'si C++'ın nesne yönelimli yapısından faydalanıyor. Hayır bir kere nesne yönelimli yapısından faydalanmayacaksan neden C++ kullanasın ki? C kullan.

*: Ekran görüntüsü;
1691878573994.png


**: Ekran görüntüsü;
1691878497893.png


Gömülü sistemler de bu kısım sıkıntı mesela. STM32 ile CMSIS paketi kullanarak çalışırken Interrupt fonksiyonları tanımlı geliyor. Eğer bu fonksiyonları C++ ile kullanırsanız fonksiyonu extern "C" {....} içerisine yazmanız gerekiyor. Yoksa Interrupt fonksiyonu her çalıştığında Hard_Fault_Handler denilen fonksiyona atılıyorsunuz (bu fonksiyonun içinde sadece while(1) var.) Derleyici aşırı yüklemeden emin olamıyor sanırım.
Doğrudur. Gömülü sistemlerle uğraşmadığım için bu tarz bir sorunla karşılaşmadım daha önce.

Derleyici aşırı yüklemeden emin olamıyor sanırım.
Aşırı yüklemeden hata verse derleyici ambiguity derdi muhtemelen. Yaşamışlığım var. Kendim C++ için print library yazıyordum deney olarak. Yazdığın bir overloaded fonksiyona eğer default parameter verirsen bu tarz bir şey yaşanıyor. Örneğin;
C++:
int sum(int a, int b) {
    return a + b;
}
int sum(int a, int b, int c = 0) {
    return a + b + c;
}

int main(void) {
    sum(3, 5); //HATA: Belirsiz
    return 0;
}
1691878895301.png
 
Son düzenleme:

Yeni konular

Geri
Yukarı