28 Aralık 2016 Çarşamba

C++ Pre Processor

__LINE__ This contain the current line number of the program when it is being compiled.
__FILE__ This contain the current file name of the program when it is being compiled.
__DATE__ This contains a string of the form month/day/year that is the date of the translation of the source file into object code.
__TIME__ This contains a string of the form hour:minute:second that is the time at which the program was compiled.



#include 
using namespace std;

int main () {
   cout << "Value of __LINE__ : " << __LINE__ << endl;
   cout << "Value of __FILE__ : " << __FILE__ << endl;
   cout << "Value of __DATE__ : " << __DATE__ << endl;
   cout << "Value of __TIME__ : " << __TIME__ << endl;

   return 0;

}




Share:

27 Aralık 2016 Salı

C++ Namespace(İsim uzayları ) ve Nested Namespace

Aynı isme sahip fonksiyonlar ,sınıflar,degiskenler bulunabilir bunları ayırt edebilmek icin "namespace" leri kullanırız  bahsedilen foknsiyon ,degisken yada sınıfı bulundugu names
kullanılır

#include       
using namespace std;

namespace first_space {        /* İlk isim uzayını tanımladık icindede foknsiyonu tanımladık*/
void func(){
    printf("Hello World!\n");
}
}
namespace second_space {     /* İkinci isim uzayını tanımladık icindede foknsiyonu tanımladık*/
void func(){
    printf("Happy New Years!\n");
}
}
int main()
{
   printf("İlk isim uzayından func foknsiyonu calıstırılıyor....!\n");
   first_space::func();
   printf("İlk isim uzayından func foknsiyonu calıstırılıyor....!\n");
   second_space::func();

}



Şayet sadece ilk isim uzayını kullanacaksak bunu belirtiriz  ve 
main kısmında hangi isim uzayı oldugunu belirtmeden func() foknsiyonunu cagırabiliriz


using namespace first_space;
int main () {
 
   // This calls function from first name space.
   func();
   
   return 0;
}

İsim uzayının içinde başka bir isim uzayı (Nested Namespace)olabilir
 bunu ard arda yazarak cagırabiliriz
#include 
using namespace std;

// first name space
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
 
   // second name space
   namespace second_space{
      void func(){
         cout << "Inside second_space" << endl;
      }
   }
}

using namespace first_space::second_space;
int main () {
 
   // This calls function from second name space.
   func();
   
   return 0;
}
 
Share:

C++ da Bellek Tahsis İşlemleri ( Calloc , Malloc )

double* pvalue  = NULL;
if( !(pvalue  = new double )) {
   cout << "Error: out of memory." <<endl;
   exit(1);

}
Yukarıdaki Şeklide Alan Tahsisi yapıp kontrol ederiz ayrılmadı ise hata döneriz 
Ayrılan alanı daha sonra kullanmayacaksak  silmeyi bu şekilde yaparız;
delete pvalue;      
Eğer Bir Dizi için Alan Ayırmayı istiyorsak;
char* pvalue  = NULL;   // Pointer initialized with null
pvalue  = new char[20]; // Request memory for the variable
Share:

C++ Dosya Okuma Yazma İşlemleri

ofstreamThis data type represents the output file stream and is used to create files and to write information to files.
ifstreamThis data type represents the input file stream and is used to read information from files.
fstreamThis data type represents the file stream generally, and has the capabilities of both ofstream and ifstream which means it can create files, write information to files, and read information from files.
ios::appAppend mode. All output to that file to be appended to the end.
ios::ateOpen a file for output and move the read/write control to the end of the file.
ios::inOpen a file for reading.
ios::outOpen a file for writing.
ios::truncIf the file already exists, its contents will be truncated before opening the file.





Dosya içinde Gezebilmek için ;


 These member functions are seekg ("seek get") for istream and seekp ("seek put") for ostream.


The seek direction can be ios::beg (the default) for positioning relative to the beginning of a stream, ios::cur for positioning relative to the current position in a stream or ios::end for positioning relative to the end of a stream.





// position to the nth byte of fileObject (assumes ios::beg)
fileObject.seekg( n );

// position n bytes forward in fileObject
fileObject.seekg( n, ios::cur );

// position n bytes back from end of fileObject
fileObject.seekg( n, ios::end );

// position at end of fileObject
fileObject.seekg( 0, ios::end );

Share:

VMWARE Sanal Makinede Ubuntu Açılmama Sorunu

Vmware makinede kurulu işletim sistemi ansızın kapandı vs. nedenlerden dolayı  ve açılamıyor ;

VMware “Cannot open the disk ‘XXXXXX.vmdk’ or one of the snapshot disks it depends on.


Uyarısı Alıyorsa  C:\Users\User\Documents\Virtual Machines\Ubuntu  altındaki   .lck uzantılı dosyaları silip tekrar açmaya çalısırsak düzelecektir
Share:

26 Aralık 2016 Pazartesi

C++ Inheritance (Miras Alma)

Türetilmiş bir sınıf, taban sınıfının özel olmayan tüm üyelerine erişebilir. Böylelikle türetilmiş sınıfların üye işlevleri tarafından erişilebilir olmamaları gereken taban sınıfı üyeler taban sınıfında özel olarak bildirilmelidir.



Share:

Class ve Struct Arasıdaki Farklar

  • Struct ve Class Arasındaki Fark : Yapılar bir değer türü, sınıflar ise bir referans türüdür. Referans tiplerinin sahip olduğu veriler, belleğin öbek (heap) adı verilen tarafında tutulurken, referansın adı, yığın (stack) adı verilen kısımda tutulur ve öbekteki verilerin bulunduğu adresi işaret eder. Ancak değer türleri, belleğin yığın kısmında tutulur. Sınıflara referans aracılığıyla ulaşılırken, yapılara ise doğrudan ulaşılır. Bu nedenle, yapı kullanımı sınıf kullanımına göre daha az maliyetlidir ve erişim hızı yüksektir.Bir sınıf oluşturulduğunda, bu, başka bir temel sınıftan kalıtım yolu ile türetilebilir ancak bir yapı başka bir yapı temel alınarak türetilemez.
  • Struct icindeki degiskenler defaultta PUBLİC iken ,Class icindeki degiskenler defaultta  PRIVATE tır                                                                                                                                             
    // Program 1
    #include
     
    class Test {
        int x; // x is private
    };
    int main()
    {
      Test t;
      t.x = 20; // compiler error because x is private
      getchar();
      return 0;
    }


  • Classlar Fonksiyon içerebilir
Share:

YAZILIM MÜHENDISLIĞINDE İYI ALIŞKANLIKLAR-2


  • Tırnak içinde % yazdırabilmek için %% yazmamız gerekir yoksa bizde atama bekler
  • Aynı tipte degiskenlerin toplandıgı yere dizi denir .Yapılar(struct)da ise farklı veri tipleri bulunabilir



  • struct isci{   char adi[20];  char soyadi[20];  int yas; char cinsiyet;  double saatlikUcreti;};  //Farklı tiplerde veriler tek bir yapı altında tutulması saglnamıştır 
  • Yeni bir yapı tipi oluştururken her zaman yapı etiket ismi kullanın. Yapı etiket ismi, programda daha sonradan o yapı tipinde yeni değişkenler bildirmek için gereklidir.
  • Union : aynı depolamayı kullanan değişkenlerin tek isim altında toplanmasıdır
  • typedef anahtar kelimesi, daha önce tanımlanmış veri tiplerine yeni(eş) isimler tanımlamada kullanılır.     Örn :   typedef struct parca Parca;    //parca ile aynı anlama gelecek "Parca" tanımladık
  • SEEK_SET aramanın dosyanın başından başlayacağını; SEEK_CUR aramanın dosyadaki o anda bulunulan konumdan başlayacağını ve SEEK_END aramanın dosya sonundan başlayacağını belirtir.
  • rewind fonksiyonu, programın dosya pozisyon göstericisini belirlenen dosyanın başına geri döndürmesini sağlatır.
  • fgetc fonksiyonu, belirlenen dosyadan bir karakter okur. fputs belirlenen dosyaya bir karakter yazdırır. fgets fonksiyonu belirlenen dosyadan bir satır okur. fputs fonksiyonu belirlenen dosyaya bir satır yazdırır
  • Dinamik olarak tahsis edilen hafızaya ihtiyaç kalmadığında,hafızayı sisteme anında geri döndürmek için free kullanın.
  • Malloc Tahsisi :yeniPtr = malloc ( sizeof ( struct dugum ) )
  • Alanı serbest bırakma :  free(yeniPtr)
  • protected : miras alanlardan ulasılabilir
  • Share:

    21 Aralık 2016 Çarşamba

    Yazılım Mühendisliğinde İyi Alışkanlıklar


    • Her fonksiyondan önce açıklama satırı yapmak
    • Her "printf" fonksiyonun içine yazdıktan sonra "\n" ile bitirmek önemlidir tekrar kullanılabilirliği saglamak açısından
    •  Virgülden sonra bir bşoluk bırakmak okunurluğu artırır
    • Değişkenleri 31 karakterden uzun yapılmamalıdır bu taşınırlığı artırır
    • int farklı sistemlerde farklılık gösterebildiğinden, eğer kullanacağınız değerlerin 32767 aralığı dışında olmasını bekliyorsanız ve programınızı farklı sistemlerde kullanabilmeyi istiyorsanız long tamsayıları kullanın.
    • Hafızanın sınırlı ya da hızın gerekli olduğu performansa yönelik durumlarda küçük tamsayı boyutları kullanmak gerekebilir.
    • break ve continue eğer uygun bir biçimde kullanılırsa, aynı etkiyi yaratacak yapısal programlama tekniklerinden daha hızlı çalışırlar.
    • float ve double tipte değişkenleri parayla ilgili hesaplamalarda kullanmayınız.Ondalıklı sayıların kesin olarak gösterilememesinden dolayı hatalar oluşabilir.
    • -1 değeri yerine EOF ile test etmek daha taşınırlığı arttırır. ANSI standardına göre EOF negatif bir değerdir. Bu sebepten, EOF farklı sistemlerde farklı değerler sahip olabilir.
    • Tekerleği yeniden icat etmekten kaçının. Mümkün olduğunda yeni fonksiyonlar yazmak yerine ANSI C standart kütüphanesi içindeki fonksiyonları kullanın. Bu, program geliştirme zamanını azaltacaktır.
    • ANSI C standart kütüphanesi içindeki fonksiyonları kullanmak daha taşınır programlar yazmamıza yardımcı olur.
    • Geri dönüş tipi void olarak bildirilmiş bir fonksiyonun, bir değer geri döndürmesi bir yazım hatasıdır.
    • Her parametre için ( eğer tipi int değilse) parametre tipi ayrı ayrı belirtilmelidir. Eğer tip listelenmezse int olarak algılanacaktır.
    • Aynı tipte fonksiyon parametrelerini, double x, double y yerine double x , y olarak bildirmek.
    • double x, y biçiminde parametre bildirmek y parametresinin tipinin int olmasına sebep olur. Çünkü belirtilmeyen parametre tipi otomatik olarak int tipinde varsayılır.
    • Yanlış olmasa da fonksiyona aktarılan argümanlarla bu argümanların yerine kullanılacak parametrelerin aynı isimde olmamasına özen gösteriniz. Bu, belirsizlikten kurtulmamızı sağlar.
    • Bir fonksiyon içinde başka bir fonksiyon tanımlamak yazım hatasıdır.
    • Bir fonksiyon genellikle bir sayfadan daha uzun olmamalıdır. Hatta en iyisi yarım sayfadan uzun olmamalıdır. Küçük fonksiyonlar, yazılımın yeniden kullanılabilmesini sağlatır.
    • standart giriş/çıkış kütüphane fonksiyonlarının prototiplerini ve bunlar
    • tarafından kullanılan bilgileri tutar
    • sayıları yazılara, yazıları sayılara çeviren, rastgele sayılar üreten, hafıza ayrılmasını sağlayan fonksiyonların prototiplerini tutar     string işlemlerini yapan fonksiyonların prototiplerini tutar  
    • Anlamlı fonksiyon isimleri ve anlamlı parametre isimleri kullanmak programları daha      okunur yapar ve yorumların çok fazla kullanılmasını engeller.
    • ANSI C standart kütüphanesi içindeki fonksiyonları kullanmak daha taşınır programlar yazmamıza yardımcı olur.
    • Performansın önemli olduğu durumlarda yinelemeden kaçının.Yineleme çağrıları fazladan vakit ve hafıza gerektirir.
    • printf ("%7d %13d\n”, j, s[j] );            //ilk degeri 7.sırada yazar 6 bosluk sonra 13.sırada ikinci degeri yazar
    • Sembolik sabitler için yalnızca büyük harfler kullanın. Bu, sembolik sabitlerin program içinde göze çarpmasını sağlayarak, programcıya bunların değişken olmadıklarını hatırlatacaktır.
    • Dizileri referansa göre çağırma, performans açısından oldukça mantıklıdır. Eğer diziler değere göre çağırma ile geçirilmiş olsaydı, her elemanının kopyası geçirilecekti. Büyük ve sıklıkla çağrılan dizilerde bu oldukça fazla vakit alacaktı ve fazladan hafızaya ihtiyaç duyacaktı.
    • printf("\n\n%p\n",&dizi);         /*Dizinin adresi Dizi[0] ile aynıdır 
    • %p dönüşüm belirteci, adresleri onaltılık sistemde yazdırır.
    • Her gösterici isimden önce * kullanılarak bildirilmelidir.
    • Beklenmeyen sonuçlarla karşılaşmamak için göstericilere ilk değer atamak.
    •            int y = 5;                                                                                                                                                                                       int *yPtr;                                                                                                                                                        yPtr=&y;   // yPtr artık y yi gösterir
    • Bir veri tipini depolamak için gerekli olan byte sayısı sistemler arasında farlılık gösterebilir.Veri tiplerinin büyüklüğüne bağlı programlar yazarken ve bu programlar farklı sistemlerde çalışacaksa veri tiplerini depolamak için gerekli olan byte sayısına sizeof kullanarak karar verin.
    • sayilar[4]   ,  *(sayilar + 4), nPtr[4] ,  *(nPtr + 4)     Hepside sayilar dizisinin 4. elemanını gösterir
    • NOT: & ile adresi alırız .. * ile degiskenin degerini gösteririz
    • NOT: Adresi yazdıracaksak printf ile   burada %p kullanırız Hexadecimal olarak yazdırırız adresi
    • d İşaretli bir tamsayıyı(onluk sistemde) gösterir. i İşaretli bir tamsayıyı(onluk sistemde) gösterir.   (Not: i ve d yalnızca scanf ile kullanıldıklarında farklıdır)  o İşaretsiz bir tamsayıyı(sekizlik sistemde) gösterir.
    • x ya da X İşaretsiz bir tamsayıyı(onaltılık sistemde) gösterir.X, 0-9 rakamlarının ve A-F harflerinin gösterilmesini ve x, 0-9 rakamları ve a-f harflerinin gösterilmesini sağlar.
    Share: