Merhaba arkadaşlar.

Osmangazi Üniversitesi Object Oriented Programming dersi için yaptığım proje.

Proje için gerekli olanları aşağıdaki gibi hoca bize verdi.Kodlamaya proposals kısmının altından devam edeceğim.

Bu Kısım fazla önemli değil ingilizce zaten fazla bir şey anladığım da yok.

Specification:
This is a board game. A sample user interface is given in Fig. 1.
Fig. 1. Sample user interface of the Find the Same, Get the Fame…
The game has the following rules:
• The game board contains 5×5 columns of letters where each column consists of 10 letters. The
columns will be formed with the letters (A – Z), randomly. The player only sees the top of these
columns. The top items will be closed by default.
• The player plays by entering the coordinates of two columns. This means that the player requests
comparison of the letters at the top of these columns. These two letters will be shown to the player
for a short time and will be closed again, if they are not the same. Otherwise, these two letters will
be removed from the top of the columns and the player will gain 5 points.
• The game will continue until all the letters are removed or more importantly, if no two of the
remaining top letters are the same, i.e., there is no possible improvement. In the second case, all
columns will be filled with new random letters from scratch.
• The player can request to terminate the game by pressing ‘Q’.
• There will be a “Top Ten High Scores” file which holds the points and duration information of the
highest scores where the score is computed by dividing points to duration. When the game ends,
the score of the player will be checked with the scores in this file and inserted if deserved.
• The game can be played by one or two players. When the program starts, single/multiplayer game
choice should be presented to the user. In a multiplayer game, when one player enters her/his
guess for the same cards and s/he is successful, her/his turn will continue, otherwise the next
player will do the guessing. The durations and the points of the players should be counted
separately.
Requirements:
At least, the following classes will be used in the project:
• Stack
• Controller/Manager
• Player
The Stack class should have the default stack implementation without any extra variable or function
definitions. The Player class will be responsible for user input controls with error checks.
The Controller class should control the game rules, manage the screen output and scores.

Proje 5-6 gün ve her gün 4-5 saatlik bir çalışma sonucu ortaya çıktı.Kodlama yaparken neyin lazım olacağını hangi fonksiyonların kullanılacağını bir kağıda sırası ile yazdım. Öncelikle bir plan oluşturmak neyi nerde nasıl yapabileceğimizin fizibilite çalişması yaparak not etmek bize çok fayda sağlayacagı için bu şekilde başlamayı tercih ettim.Bir söz vardır:”Planlamaya ayrilan bir dakika, Uygulamada bir saat kazandirir.“.Mantık bu :) .

Neyse ilk olarak matrix in constructorunu tanımladım ve default olarak tanımlanan matrixin içini ‘-’ ler ile doldurdum default matrixde.Columns ve Rows ların get ve set fonsiyonlarını yazarak kodlamaya devam ettim.Daha sonra herhangibir matrixin içerisini ‘-’ ler ile dolduracağımız MatrixEmpty fonksiyonunu yazdık matrix classında.Yazdığım MatrixFill fonksiyonu ile de matrix in içine random upper harf atadık.MatrixShow ise matrix imimizi göstermek istediğimiz yerde matrixi gösteren fonksiyon.

Matrix fonksiyonunu yazarken karşılaştığım sorunlardan biri random harf üretme idi.Bu problemi ASCII kodu kullanarak ürettiğim sayıları aralık olarak uppercase harflerin ASCII kod sayılarını baz aldık ve daha sonra bunları char a çevirdik.

Game class’ı her nekadar kısa ve önemsiz gözükse de önemli bir işleve sahip.Game class’ı  kullanıcıdan kordinantları almaya yarıyor. Overload ettiğimiz >> ve << ile de kordinant isteme ve girme noktasında görsellik ve kolaylık sağlıyor bize.

Daha sonra ControllerManager class’ı ile devam ettim kodlamaya.ControllerManager’de  Start_Menu ile başladım kodlamaya. Start_Menu fonksiyonu ile başlangıç ekranında nelerin görüneceğini yazdım.Start_Menu de switch case yapısını kullanarak kullanıcının seçim yapmasını sağladım.

ControllerManager class’ı fonksiyonlarından biri ControlForCordinantes. Bu fonksiyonda girilen kordinantların 0 ile 4 arasında olmasını kontrol ediyoruz. ControlNotSameMember fonksiyonu ile de oyunun bitip bitmediğini kontrol ediyoruz.Burada ControlNotSameMember fonksiyonunu yazarken bayağı uğraş verdim.Ilk başta netin nasıl olacagına kara veremedim sonra vector kullanarak bunu çözebileceğimi anladım.Vector kullanırken burada daha sonraki classda göreceğimiz kullanıcının bildiği harflerin yerine ‘-’ ekleme ile bilinen harfleri matrixten çıkarıyoruz yerine ‘-’ ekliyoruz ve arta kalan harfleri vector tarzda arraya ekliyoruz.Burada vector kullanma sebebim ise bilinen harf sayısı sürekli değişeceği için esnek bir yapı olması.Vectore eklediğimiz harfleri çift for kullanarak baştan sona kontrol ediyor ve aynı harfin var olup olmadığını denetliyoruz.

Ek olarak classtaki Wait fonksiyonu ile de kullandığımız herhangibir yerde proğramı  fonksiyona göderdiğimiz int değer kadar saniye bekleme sağlıyor.

Son olarak Player class’ını yazdım.Kodlamada en çok uğraştıran kısım olan Player class’ı tek ve çok kullanıcı ile oyunun oynanmasını sağlayan, kullanıcının aldığı puan süreyi ismi ile txt dosyasına kaydeden fonksiyonların kodları içeriyor.

Oyunda ve kodlamada en önemli kısım SinglePlayer kısmı.Bu fonksiyonda goto ve if yapısını çok kullandım.Goto yapısı her ne kadar kodlamada elverişli olmasada aklıma gelen tek çözüm yöntemi idi.

İf yapısı ile şartları kontrol ediyor ve şartlar ugun değil ise goto ile ya başa gidiyor yada sona gidiyorduk.Kullanımı sakıncalı fakat kolaydı.

Başlangıcta kullanıcıdan ismini girmesini istiyoruz ve oyuna devam ediyoruz.Başta 3 matrix tanımladım bunun sebebi  1 matrixi random harflerle üretip hafızada tutuyoruz.Oyuncunun bildiği harferi 2. Ürettiğimiz boş matrix e atıyoruz. 3. Matrix ise aracı olarak kulanıyoruz eğer harfler benzer bulunmamış ise harflerin sadece ekranda görünüp sonra tekrar eski haline gelmesi için bilinenlerin hafızada tutulmasını sağlamak amacı ile kullanıyorum.Bunun daha basit yöntemi olacağını biliyorum fakat uzun uğraşlar ile ancak bukadarını yapabildim.Kodlamada en sıkıntılı yer burası idi.

İlk olarak girilen kordinantların doğrulugunu kontrol ediyoruz yani daha önce bilinen harlerin olduğu koordinantmı yoksa ucuk bir koordinantmı diye sonra ise if yapılarında ControllerManager class’ının fonksiyonlarını kullanarak tek tek kontrollerden geçiriyoruz girilen koordinantlarda bulunan harfleri. Şartlara göre kullanıcıya puan ve süre ekleniyor.

MultiPlayer kısmında ise SinglePlayerdeki kodların aynısını kullandım.Ek olarak sadece sıranın hangi kullanıcıda olduğunu beliremek için player1 ve player2 için MultiControl sayısı ekledim.Bu MultiControl sayısı ilk başta her iki oyuncu için 0 ile başlıyor ve 1. Oyuncu oyunu oynamaya başlıyor. Eğer 1. Oyuncu doğru veya yanlış tahminde bulunmuş ise MultiControl sayısı 1. Oyuncu için 1 arttırılıyor. Kontorlu ise 1. Oyuncunun  MultiControl sayısı 2. Oyuncunun MultiControl sayısına eşit ise 1. Oyuncunun sırası geldiğini anlıyoruz fakat ise 1. Oyuncunun  MultiControl sayısı 2. Oyuncunun MultiControl sayısından buyuk ise sıranın 2. Oyuncuda olduğunu anlıyoruz.

Son olarak bu classta TopTenPlayer ve MultiTopTenPlayer ile oyuncuların scorlarını sürelerini isimlerini txt dosyasına kaydetmesini sağladım ve consol oyunu içerisinde kullanıcının scorları görebilmesi için ShowTopTenPlayer ve ShowMultiTopTenPlayer i kodladım. Oyunun kurallarını gösteren Game_Rules ile de oyunun kurallarının ne olduğunu belirttim.

Oyunun kodlaması bunlardan ibaret. GamePlay.cpp de türetilen ControllerManager tarzda türetilen Cstrt nin fonksiyonu olan Start_Menu ile oynu başlatıyoruz ve artık oyun oynanmaya hazır oluyor.

Proje’nin Solution’u (Visual Studio 2010 ile yazılmıştır): Solution

Proje’nin Kaynak Kodları: Source Codes

Kodlara Bakmak için aşşagıdaki linkleride Kulanabilirsiniz:

ControllerManager.cpp : http://pastie.org/private/sr1xxq6cjd3vfl9kzq2pg

ControllerManager.h : http://pastie.org/private/r1xghfhwocxf1mjnmfdpig

Game.cpp : http://pastie.org/private/r2ncliuw1qr0jel4ffoq

Game.h : http://pastie.org/private/se1ct4imstgh6b65gfuwow

Matrix.cpp : http://pastie.org/private/lgxcou0ah6reemgdrumcxa

Matrix.h : http://pastie.org/private/bqax9bsmndyw06ivyvwdg

Player.cpp : http://pastie.org/private/t9x390ull4xqo2tk2f3gqq

Player.h : http://pastie.org/private/h1dbwptyxgwxqf8wnlwtmg

GaePlay.cpp : http://pastie.org/private/kqdlj0anycvea2oln7ktg

Saygılarımla…

Eren GENÇTÜRK

www.erengencturk.com.tr

Diyelim ki c#da  bir sinema otomasyonu yapmanız gerekiyor.Formu dizayn ederken yapmanız gereken koltukları temsilen herhangi bir kontrol eklemektir.Bir sinema salonu 50 kişilik ve 4 tane de salon varsa toplamda formlarınız için 200 tane kontrol eklemeniz gerekmektedir.Oldukça uğraştırıcı ve zaman kaybettiren bir dizayn işlemi olacaktır sizin için.Programlama bilgisi çok iyi olmayan birinin yapacağı kontrolleri tek tek eklemek olacaktır,oysa ki object oriented programming(nesne yönelimli programlama)  dan ve nimetlerinden haberdar olan programlamacı ise kontrolleri tek tek eklemez onları kodu çalıştırırken yapabileceğini bilir.Benim bahsedeceğim de 2. seçenek,yani kontrolleri elle, tek tek değil de kod içerisinde oluşturup çalıştırmaktır, yani Run-Time(çalışma anında) nesne oluşturmak olacaktır.

Run-Time kontrol oluşturabilmek için o kontrolden bir nesne yaratmanız gerekecektir.

    Button btn = new Button();  diye tek bir nesne oluşturup döngüler yardımıyla istediğiniz kadar buton görüntüleyebilirsiniz.

Bu konuyla ilgili BilgeAdamda staj yaparken derste yazdığımız  şu  kodu beraber inceleyelim:

 

int x = 40; //başlangıç x koordinatı

 

int y = 40;//başlangıç y koordinatı

int b = 1; //yerleştirilen buton numarasının tutar

private void Form3_Load(object sender, EventArgs e) //işlemleri form yüklenirken yapsın

{

for (int i = 0; i < 10; i++)                          //matrix mantığı ile 100 tane buton oluşturacaz

{

        for (int j = 0; j < 10; j++)

{

Button btn = new Button();

                                  //butondan bir nesne oluşturmamız gerekecek

btn.Name = “btnNo” + b;

                           //her birinin adı oluşum sıralarının adını alacaktır

btn.Text = b.ToString();

btn.Size = new Size(40, 40);              //size her defasında 40-40 olacaktır

btn.Left = x;

x += 40;                                //x koordinatı tek bir satır için her defasında 40 yana kaymalı

btn.Top = y;                         //y koordinatı aynı satır aynı kalır alt satıra geçildiğinde 40 artar

b++;                             //butonun numarası her defasında bir artacaktır

btn.Click += new EventHandler(btn_Click);    //hatta isterrsek o butona event bile yazarız

                //butona basılma eventini tutar

                    //event olduğunu += gösterir

                               //bu formun kontrollerine oluşturduğun btn nesnesini eklemen gerek

this.Controls.Add(btn);                  //btn kontrolünün nereye ait olduğunu belirtmeiz gerekir,formun kontrolü

}

x = 40;                     //ilk 10 taneyi oluşturduktan sonra alt satıra geç ama lefti değişmeyecek

y += 40;                    //top üstten bir satır uzaklaştığı için +40 olmalı

}    }

void btn_Click(object sender, EventArgs e)

{

Button btn = sender as Button;

//sender içinde thisin verilerini tutar

MessageBox.Show(“Merhaba ” + btn.Text + ” im..”);

 

işte çıkan sonuç:

 

 

Butona tıkladığımızda da şöyle bir görüntü oluşur:

 

 

 

DERYA GÜNDÜZ

deryagunduz.blogspot.com

Projemde 5×5 matrix içine her defasında random olarak atılan, her birinden ikişer tane olmak

üzere 12 çeşit harf ve birinin eşi olmayan harfler kullandım .Matrixi “manager” classında

tanımladım matrixden main de nesne oluşturdum,”harfler” adlı 25 elemanlı bir dizide 13 çeşit harf, her

birinden 2şer tane birinin eşi olmayacak şekilde ,eleman atadım.ayrıca “diz” adında 25 elemanlı bir dizi

daha oluşturdum ve bu dizinin elamlarını 1den 25e kadar random oluşturulmuş sayılar meydana

getirdi.Sonra “diz“ dizisinin 1. elamanının değerine göre “harfller” dizisinin elemanını aldım ve

matrixin sıradan gelen elamanı ile eşleştirdim.Böylece matrix her program çalıştığında random olarak

harf değerlerini almış oldu.

Manager classından iki tane nesene oluşturdum,”ilk” matrixi random harf değrleri atanmış

matrix,”geçici” matrixi ise en başta boş olan ve kullanıcının söylediği koordinatların eşitlik durumuna

göre değer alan matrixdir.koordinatlar aynı oldukça “geçici” matrixi “ilk” matrixinin o koordinat

değrlerine eşit oluyor,o değerleri alıyor ve ekranda o değerler kapalıken açılmış gibi

görünüyor,koordinatlar aynı olunca “manager” claasına yamış olduğum “puanarttır” fonksiyonu devreye

giriyor ve oyuncu 5 puan kazanıyor.Girilen koordinatlar aynı değilse “ilk” matrixinin o koordinatı ile

“gecici” matrixinin o koordinatı eşit olmuyor oyuncu bir süre o koordinatları görüyor ve sonra o

görünen koordinatların yerine gecici matrixinin elemanları görünüyor(kapalıymış gibi).

Koordinatların alınması işini de “player” classı yapıyor,kullanıcıdan koordinat isiyor,kontrolleri

yapıyor ona göre “gecici” matrixine eleman ataması yapıyor ya da koordinatlar matrix indexi dışındaysa

hata mesajları döndürüyor.

Her bir puan verilip ya da yanlış koordinat söylenmesi halinde kullanıcıya çıkış yapıp

yapmamak istediği soruluyor,oyuncya çıkmak istiyorsa “q” ya devam etmek istiyorsa herhangi bir tuşa

basılması gerektiği söyleniyor.

projenin tamamını indirmek  ,kodları görmek için    tıklayın

DERYA GÜNDÜZ

http://www.deryagunduz.blogspot.com

deryagunduz47@gmail.com

          Template in kelime anlamı taslaktır,c++ daki  kullanım şekli de kelime anlamına çok yakın bir kullanımdır. Fonksiyonu taslak olarak yazıyorsunuz ve  bu  fonksiyon farklı kullanım şekilleri  için esnek bir yapıya  sahip oluyor.

          C++ daki Function Template için  farklı tiplerde  kullanım esnekliği vardır.Bir  fonksiyonu farklı farklı tipler için ayrı ayrı yazmak yerine,tek bir  fonksiyon taslağı yazıp  bunu farklı tipler için kullanabilirsiniz.

          örneğin bir mutlak değer  fonksiyonun int veri tipi için şu şekilde yazarız:

 

 

        int mutlakdeger(int a){

      if(a>0)    return a;

       else return -a;

        }

    

      double veri  tipi için olanını şu şekilde yazarız:

                          

        double  mutlakdeger(double  a){

      if(a>0)    return a;

       else return -a;

        }

      

     long olan için ;

            long  mutlakdeger(long  a){

      if(a>0)    return a;

       else return -a;

        }

      

               yani bütün tipler için ayrı ayrı yazardık.Bunu  taslak şeklinde yazıp  bütün veri tipleri için kullanabilmek istediğimiz   zaman yapmamız gereken şey fonksiyonu template  şeklinde tanımlamak.

 

           Template kulllanımı şu şekilde: 


    template            //fonksiyonun başına yazılması gereken

     T mulakdeger (T a)                    //yukarda tanımladığımız template Tyi  veri tipi olarak  kullandık

  

             {

 

 if(a>0)    return a;

       else return -a;

 

         }

            int  main(){

              cout<<"int veri tipi için mutlak deger alma";

              cout<<"double veri tipi için mutlak deger alma";

             }

  bu şekilde kullanarak her veri tipi için ayrı yazma  gerekliliğinden kurtuluruz,kodlar kısalır fazla zaman  harcamak zorunda kalmayız.

          

    Template çeşitleri:

 

  •  template      //fonksiyonlar için kullanılır
  •  template                 //classı template şekilde kullanabilmek için,daha çok data                storage classlarda(container)  kullanılır
  •  template        //birden fazla  tip tanımlayabiliriz

       Class Template:

            templateler ayrıca classlar için de kullanılabilir,işlev olarak  functşon template gibidir

           

           template

class  deneme{

                    //  classın diğer  elemanlarının prototypeları  yazılır

……………

       public int  denemefonk(T  ){}

……….. 

            };

            implementasyonlar:

 

         template

          deneme::denemefonk(T  a){………..}

 

           int main(){

         denemenesne;

          ………..

       }

 

  şeklinde kullanılır…………

     

DERYA GÜNDÜZ

Eskişehir Osmangazi Üniversitesi  Bilgisayar Mühendisliği 2. sınıf

http://www.deryagunduz.blogspot.com

deryagunduz47@gmail.com

c++daki hata yakalama olayı program içindeki istisnai durumları ayrı bir blok içinde tutup,programın çalışmasını engellemelesizi önlüyor.

bunu sağlayan en temel yapı da “throw”‘dur,throw ile hatalı ya da istisnai durumda ne yapması gerektiğini bildiyoruz ve main içinden try-catch yardımıyla hatalı durum zamanında çağırıyoruz.

örneğin bölme işlemi yapan bir program düşünelim, =a bölmek normalde hata verir ,0a bölme yapıldığında programın hata verip  durmasını engellemek için,kendimiz 0a  bölme yapması durumunda istediğimiz  durumu çalıştırıyoruz.

şimdi bunun ile ilgili örnek kodumuzu inceleyelim:

//hata yakalama
#include<iostream>
using namespace std;
double divide(int a,int b){
if(b==0)  throw “0a bolme olmaz”;
return ((double)a/b);
}
int main()
{int p;
 int x,y;
 cout<<”x:”;
 cin>>x;
 cout<<”y:”;
 cin>>y;
 try{
  cout<<”bolum:”<<divide(x,y)<<endl  ;                                  //bir problem yoksa bu kısım çalışır
 }
 catch(char *s)
 {
 cout<<s;                                       //0′a bölme varsa  üstee hhrow ile yazılanı çağırır
  }
cin>>p;
}

DERYA GÜNDÜZ

http://deryagunduz.blogspot.com

mikroskosmos@hotmail.com

           polymorhism nedir?

polymorphism’in  türkçesi çokbiçimliliktir,

çok biçimlilik  sözcüğünü duyduğımuzda aklımıza  tek bir  şeyin farklı kullanımlara farklı yanıtlar vermesi  gelebilir.bunu sınıf  kullanımına indirgediğimizde ise birbiriyle kalıtımla ilişkisi olan farklı sınıfların nesnelerinin aynı üye   fonksiyon çağrısına farklı yanıt vermesi  şeklinde açıklayabiliriz.

           polymorphism nasıl kullanılır?

bunun için bir base classımız olmalı(temel sınıf),ve ondan kalıtımla oluşan derived classlar(türetilmiş sınıflar).

base classda oluşturulan bir  fonksiyon diğer sınıflarından hepsinde de kullanılacak ama bu  fonksiyonların herbirinin içeriği  farklı olacak.

base classda tanımladığımız ve bütün classlar için ortak kullanmak istediğimiz fonksiyonu base classda tanımlarken bunu “virtual”  olarak tanımlayıp,kullanmalıyız.diğer classlara  tanımlama  yaparken ise  normal tanımlama yapılmalıdır.

base classdaki tanımlama:

        public  virtual string speak() const

kalıtılmış  sınıftaki tanımlama:

        public string speak() const

mainde  bunu kullanacakken de alt sınıflardan nesne oluşturup bunu base classın pointer’ına ya  adresine eşitlemek  gerekir.

dog kucik  //dog derived class,pet  base class

pet *p1=&kucik

ya da

pet &p2=kucik

şeklinde kullanılır

                   polymorphismin ne fayda sağlar?

 aynı fonksiyonu kullanacak yeni bir alt class eklendiğinde de  fonksiyonun içeriğini tekrardan yazmak zorunda kalmacağız.

bu  söylediğimiz  durum tabiki  büyük projelerde avantaj sağlayacaktır,temel bir  içeriğie  sahip  fonksiyon var ve  buna herbir  oluşturulan classda yeni özellikler ekleniyor.

şimdi deitelin kitabında olan bir  kodu beraber inceleyelim:

header  dosyası

//pet base classındaki speak()  normal kullanılsa dog’dan nesne  oluşturulup
//speak kullanıldığında hep pet’teki speak fonksiyonunu çalıştıracaktı,
//bunu engellemek içik için base classdaki speak()   fonksiyonunu  virtual yapmalıyız,
//böylece  kimden nesne  oluşturulsa hangisi speaki  seçeceğine  karar verebilir


#pragma once
#include <iostream>
using namespace std;

class pet
{
public:
 virtual string speak() const                        //ortak kullanılacak fonksiyon
 {   return    “”;

 }

};
class dog:public pet
{
public:
   string speak() const{               //bu  fonksiyonda virtual olabilirdi,ozman adres pointer atamalarına gerek kalmazdı
 return “bark”;
 }

};

main dosyası

#include <iostream>
#include<string>
#include “pet.h”

using namespace std;
int main(){
 int x;
dog  kucik;

      //eğer  dog daki   speak() fonksiyonu da  virtual olsaydı;
      //ozaman  adres pointer atamalarına gerek kalmadan dog kendi  fonksiyonunu direk kullanabilirdi
      //cout<<”dogun nesnesi:”<<kucik.speak()<<endl;   output:bark
      //pet f;
      //cout<<”petin nesnesi:”<<f.speak()<<endl;  output: 

 

pet *p1=&kucik;                       //dogdan oluşturduğu nesnesinin adresini petin pointerına eşitliyorr,
                  //böylce p1 dogun speak() fonksiyonunu kullanabilir
pet &p2=kucik;                                                 //p1 atamasıyla aynı  oluyor,kullanımı farklı sadece
pet p3;                                                               //direk  p3ten nesne oluşturmuş

cout<<”p1->speak=”<<   p1->speak()   <<endl;                      //p1  pointer olduğu için p1->  diye kullanıyor
cout<<”p2->speak=”<<p2.speak()<<endl;                               //p2 pointer değil  p2.   diye kullanıyor
cout<<”p3.speak=”<<p3.speak()<<endl;
cin>>x;

}

DERYA GÜNDÜZ

http://www.deryagunduz.blogspot.com

mikroskosmos@hotmail.com

deryagunduz47@hotmail.com

inheritance(kalıtım):bir classın diğer classın özelliklerini alıp ona bişeyler daha da ekleyip kullanmasıdır.
base class(ana class):içeriğini veren temek classtır.
derived class(türetilmiş class):base classın içini kullabilen türetilmiş classtır.

bir classı inherit etmişsek(kalıtım),costructer ve destructerları çalışıken bunların bi hiyerarşik sırası vardır,şimdi  bununla ilgili  örnek kodu inceleyelim:

HEADER FİLE

#pragma once
 
class nokta//base class
{
public:
	nokta(int=0,int=0);
	~nokta(void);
protected://protected olsun ki derived classlardan da kullanılsın
	int x;
	int y;
};
 
class daire:public nokta//derived class
{
public:
	daire(double r=0.0,int x=0,int y=0);
	~daire();
private:
	double yaricp;
};

İMLEMENTATİONLAR

#include "nokta.h"
#include <iostream>
 
using namespace std;
nokta::nokta(int a,int b)
{
	x=a;
	y=b;
	cout<<"nokta constructer:"<<'['<<x<<","<<y<<']'<<endl;
 
}
 
nokta::~nokta(void)
{
cout<<"nokta destructer"<<'['<<x<<","<<y<<']'<<endl;
}
daire::daire(double r,int a,int b):nokta(a,b)
{
yaricp=r;
cout<<"daire constructer yaricap:"<<yaricp<<'['<<x<<","<<y<<']'<<endl;
}
daire::~daire(){
	cout<<"daire destructer yaricap:"<<yaricp<<'['<<x<<","<<y<<']'<<endl;
}

MAİN KODU

//inheritance ile birlikte consructer ve destructer  kullanma
//önce base claasın  constructerı çalışır
//önce derived classın destructerı çalışır
#include <iostream>
#include "nokta.h"
using namespace std;
 
int main()
{  
	{
	nokta n(11,22);//noktanın constructerı çalışır
	}//destructor çalışabilsin diye blok koyuyoruz,noktanın destructorı çalışır
cout<<endl;
daire daire1(14.5,72,29);//noktanın constructerı,dairenin constructerı
cout<<endl;
daire daire2(10,5,5);//noktanın constructerı,dairenin constructerı
cout<<endl;
 
return 0;
}//noktanın constructerı,dairenin constructerı,daire1 için
//noktanın constructerı,dairenin constructerı,daire2 için

DERYA GÜNDÜZ

ESKİŞEHİR OSMANGAZİ ÜNİV. BİLGİSAYAR MÜHENDİSLİĞİ 2. SINIF

deryagunduz.blogspot.com

mikroskosmos@hotmail.com

deryagunduz47@gmail.com

genelde “string” ve “char” birbirine karıştırılır ya da kullanılırken karıştırılırlar, aradaki fark anlaşılamaz.

char:tek bir karakterdir

string:karakter dizisidir

char d=’g';//diye kullanılır

string d=”derya”;//diye kullanılır

aynı şeyi hem string hem char ile de yazabiliriz:

char d[]={‘d’,e”,’r',’y',”,’a'} =     string p =”derya”

ekrana yazdırılırken de :

printf(“%s”,p);    =     printf(“%s”,d);=

char için tek bir karakter ekrana basılacaksa:

char d=’f';

printf(“%c”,d);
şeklinde yazdırılır…………………………

DERYA GÜNDÜZ

deryagunduz.blogspot.com

mikroskosmos@hotmail.com

deryagunduz47@gmail.com

string c++ da varolan bir classtır,bunu kullanmak için kodumuzun başına “<string>” eklentisi yapmalıyız.string classının içinde  içinde overload olmuş operatorlar ve hazır  fonksiyonlar vardır,bununla ilgili örnek kodumuzu inceleyelim:

#include<iostream>
 #include<string>
 using namespace std;
 int main()
 {
  int sayi;
 string s1("derya"),s2("gunduz"),s3;
 cout<<"s1:"<<s1<<endl<<"s2:"<<s2<<endl<<"s3:"<<s3<<endl;
 cout<<"s1=s2 mi?    "<<(s1==s2? "evet":"hayir")<<endl;
 cout<<"s1>s2 mi? "<<(s1>s2?"evet":"hayir")<<endl;
 if(s3.empty())
 cout<<"s3'de  birsey yok\n";
 s3=s1;
 cout<<"s3 u s1e esitleyelim\n yeni s3:"<<s3<<endl;
 s3+=s2;
 cout<<"s3+=s2 olursa s1:"<<s3<<endl;
 s1+="ke";
 cout<<"yeni s1:"<<s1<<endl;
 cout<<"s1'in 1. indisten başla 3 harfini al "<<s1.substr(1,3)<<endl;//kaçıncı harften başlayıp kaç tane alacağı
 string s4(s1);//s1'e eşit bir s4 oluşturma
 cout<<"s4:"<<s4<<endl;
 s4[0]='p';//ilk elemanı değiştirme
 cout<<"s4[0]=p olursa:"<<s4<<endl;
 
}

ÇIKTI

s1:derya
s2:gunduz
s3:
s=s2 mi?  hayir
s1>s2 mi  hayir
s3′de birşey yok
s3 u s1 e esitleyelim
yeni s3:derya
s3+=s2 olursa  s1:deryagunduz
yeni s1:deryake
s1′in 1. indisten  basla 3 harfini al ery
s4:deryake
s4[0]=p olursa:peryake

DERYA GÜNDÜZ

deryagunduz.blogspot.com

mikroskosmos@hotmail.com

deryagunduz47@hotmail.com

“a” adında bir dosyamız olacak,bu dosyamızın bir kopyasını oluşturacaz ve “a”nın içindekiler “a_kopya”da
da olacak,kodumuzu inceleyelim:

main()
 
{
 
char k[20];//kopyalanacak dosya adı
p[28]="Kopya_";//oluşan dosya adının bir kısmı
 
FILE *derya;
 
printf("dosya adı : \n");
 
scanf("%s",k);
 
strcat(p,k);//2. oluşan dosyanın adı a_kopya
 
derya= fopen(p,"w");//w de dosya yoksa aynı zamnda oluşturuyordu da
 
FILE *gunduz;
 
int ch;
gunduz = fopen(k, "r");
 
if (gunduz== NULL) {
 
printf("dosya açılamadı %s\n", k);
 
exit(8);
 
}
 
while (1) {
 
ch = fgetc(gunduz);
 
if (ch == EOF)
 
{ break;}
 
fprintf(derya,"%c", ch);
 
}
printf("kopyalama sona erdi!\n");
return 0;
}

DERYA GÜNDÜZ

http://deryagunduz.blogspot.com

deryagunduz47@gmail.com

mikroskosmos@hotmail.com

© 2010 bilyaz.com , Programlama Makaleleri, Yazılım Makaleleri , Örnek Kodlar , Eğitim Videoları , C#,ASP.NET,SQL,PHP Suffusion WordPress theme by Sayontan Sinha