İbrahim Olgaç 06104406 PROGRAMLAMA DİLLERİ SUNUMU C# C# vs. C++ İbrahim Olgaç 06104406 PROGRAMLAMA DİLLERİ SUNUMU C#
C# vs C++ Temel farklılıklar C# ,Java gibi derlenen değil yorumlanan bir dildir, yani C#.NET kodu ilk önce IL’ye (Intermediate Language-Aradil) derler, bu IL kodu çalıştırılmak istendiğinde CLR ,JIT derleyicilerini kullanarak kodu makine diline çevirir. C++ ta ise kod derlenerek makine diline çevrilir. C# ta Tanımlama ve deklarasyon ayrımı yoktur,fonksiyonlar veya class lar tanımlandıkları yerde yazılırlar C++ #include, C# using Class lardan sonra ; yoktur C# kodu link edilmez C# ta garbage collector bulunur Tüm objeler new operatörüyle oluşturulur ve herşey bir objedir!
Veri Tipleri C++ veri tipleri C# ta veri tipleri, Sbyte , byte Byte, signed, Short.Unsigned short int , unsigned int, Long float, double Char, string C# ta veri tipleri, Sbyte , byte Short,Ushort int ,Uint Long,Ulong float,double Char,string Decimal
Değişken Tanımlamaları C++ değişkenlerin ilk değerleri verilmediğinde junk değerler alırlar İnt a; // a nın değeri belli değil Dizi tanımlamaları: int array[3] = { 1,0, 2 }; int myArray2d[][2]= { {1, 0}, {3,4}}; C# ta bir değişken tanımlandığında ilk değeri 0 yada NULL olur Örn. int a; // a=0 dır. Dizi tanımlamaları: int [] array = { 1,0, 2 }; int [,] myArray2d; myArray2d = new int[2,2] { {1, 0}}; Yorumlarda C++ ta olduğu gibi tek satır için //, birden fazla satır için /* */ kullanılır
The other difference is that there is no equivalent to the C++ delete operator in C#. Instead, with C# the .NET, garbage collector periodically comes in and scans through the references in your code in order to identify which areas of the heap are currently in use by your program.
Kontrol Yapıları C# taki kontrol yapıları C++ takinin neredeyse aynısıdır İf else yapısı, switch, yapısı C++ takiyle aynı syntax ta çalışır fakat if yapılarında C# ta İf ( a ) gibi bir ifade olamaz bu C++ ta a 1 ise anlamına gelir C# ta ise syntax hatasıdır ve if ( a==1 ) gibi yazılmalıdır. Döngüler yine c++ takinin aynısıdır. Fakat foreach gibi ayrı bir döngü yapısını barındırır, bu yapıda bir dizideki tüm elemanlara uygulanacak bir işlemin yapılmasını kolaylaştırır, Örn int[] dizi={1,2,3,4,5}; int toplam = 0; foreach (int count in dizi) Console.WriteLine(count); Dizideki tüm elemanları ekrana yazar.
Fonksiyonlar C# ta Global fonksiyon yoktur, tüm fonksiyonlar bir class içinde olmalıdır. Fonksiyonların prototipleri ve tanımı tek bir dosyada olmalıdır Const tipinde fonksiyonlar yoktur Fonksiyon overloading vardır Parametrelerin default değerleri yoktur C# int MyFunc( int x=0 ){ // error Return x*x; }
C#'ta Pointer C# ta pointerlar yalnızca class lar içinde tanımlanabilir, ve başında unsafe öneki bulunmalıdır, fonksiyonlarda kullanmak için yine unsafe eki gereklidir, ve fonksiyonlarda pointer tanımlanamaz, ayrıca pointer bulunan bir kodu derlemek için VS da proje özelliklerinden Allow unsafe code blocks özelliğini açmak gerekir. class Sınıf { unsafe char *ptr; } unsafe int NormalMetot(int a, string str) { // pointer işlemleri }
Döngüler For ve while döngüleri c++ takinin aynısıdır, Yalnız while ( a ) yerine while ( a==1 ) yazılmalıdır yada while ( !a ) yerine while ( a!=0 ) For döngüsünde de aynı durum geçerlidir
C# public abstract class Shape{ I. Abstaract (soyut) sınıftan yeni bir sınıf türetilemez. Örneğimizde person sınıfı abstract sınıftır ve new anahtar sözcüğü kullanılarak yeni nesne oluşturulmaz. II. Abstract metodların mutlaka içleri boş olarak yaratılır ve türetildikleri sınıflarda (en az bir sınıf türetilmek zorunda) mutlaka içleri override anahtar sözcüğü kullanılarak doldurulur. C# public abstract class Shape{ public abstract double Perimeter(); } C++ class Shape { public: virtual double Perimeter()=0; // Perimeter func };
Generic Types C++ // Define a generic type generic <typename T> class testList { ... }; // Constrain a type parameter generic <typename T> class testList { ... }; // Create an object from a generic type testList<int> list = gcnew testList<int>();
C# struct Yapi { public int x; char c; // default private public Yapi(int x, char c) this.x = x; this.c = c; } C++ struct Yapi { int x; char c; // default public Yapi(int y, char d) x = y; // this c = d; } };
static readonly elemanlar bulundukları sınıfın üye elemanları tarafından değiştirilebilir(!), fakat const olan üye elamanlar asla değiştirilemez ve derleme zamanı sabiti olarak ilk değerleri verilmelidir. static readonly üye elemanlarının değiştirilebilmesini , static readonly üyeyi içeren sınıf bu üyeyi aşağıdaki durumlarda değiştirebilir : - değişken ilk değer verilen durumda - static yapıcı metotlar içinde