26 Nisan 2012 Perşembe

C++ Virtual(sanal) Fonksiyonlar Örneği

          Kod kısmına geçmeden önce ufak bir açıklama yapmak istedim virtual fonksiyon hakkında.
Üstteki resimden yola çıkacak olursak Animal sınıfı Base class , Wolf, OtherAnimal ve Fish sınıfları da
bu Base class tan türetilmiş sınıflar GoldFish de Fish den türetilmiş.Tüm türetilmiş sınıfların ortak özelliği
  "yemek" üzerine düşünün.Animal sınıfı eat() fonksiyon içeriyor,diğer sınıflar da öyle, yalnız türetilmiş sınıfları
pointer arrayına attığımızda   Animal *Ptr[3];  ve bu arrayın elemanlarının eat() fonksiyonunu  Ptr[0]->eat(); komutuyla her cagırısımızda  beklediğimiz şey her nesnenin kendi özelliğini ekrana yazması ama bu çağırım
Base class daki eat() fonksiyonunu çağırmaktan başka bişey değildir.Amacımıza uygun çıktı için Base class'da
eat() fonksiyonunun başına  virtual  anahtar kelimesini getirmeliyiz.Kodları  buradan indirip üstünde oynamalar yapabilirsiniz,öğrenmeniz için daha iyi olacaktır.Aynı zaman da aşşağıda da inceleyebilirsiniz. Kolay gelsin..


/*
Cüneyt Çarıkçi  27-04-2012
cuno_carikci@windowslive.com
*/

#include
using namespace std;

class Animal {
public:
virtual void eat() {
cout<<"??!!..!!??\n";
}


/* Saf sanal sınıf icin
 bir alt satır aktiflestirilmeli
virtual void eat()=0;*/

   ~Animal() {}//unutulmamalı
};

class Wolf : public Animal {
public:
    void eat() {
        cout << "Kurt: Ceylan yer!\n";
    }
};

class Fish : public Animal
{
public:
    void eat() {
        cout << "Balik: Balik yer!\n";
    }
};

class GoldFish : public Fish {
public:
    void eat() {
       cout << "Akvaryum Baligi: Balik yemi yer!\n";
    }
};

class OtherAnimal : public Animal {
};

int main() {
Wolf w;
Fish f;
GoldFish g;


Animal *Ptr[3];

Ptr[0]=&w;
Ptr[1]=&f;
Ptr[2]=&g;

cout<<"             ------HAYVANLARIN BESLENME SEKILLARI------\n";

for ( int i = 0; i < 3; i++ ){
Ptr[i]->eat();
/*
Base class da eat() fonksiyonunu
virtual (sanal) yapmasaydık
her cagirilista Base class'taki
eat() cagirilacaktı ki bu da istedigimiz
bir şey degil.Ortak bir payda altında
Her nesne kendine ozgu
özellikler barındırabilir ve bizim
bunlara ulaşmamız gerekebilir.
*/
}


system("PAUSE");
}


10 Nisan 2012 Salı

C++ Inheritane(kalıtım) Örneği 2















#include
#define pi 3.14
using namespace std;
class point {
friend ostream& operator<<(ostream& yaz,point p){ //<< operatorunu asırı yukledik
yaz<<"("<
return yaz;
}

private:
int x,y;
public:

point(int a=0,int b=0)
{
setPoint(a,b);
}
void setPoint(int a,int b)
{
x=a;
y=b;
}
~point(){}//test amaclı bi seyler yazılabilir
};
class cember:public point{ //point'ten cember turettık //:public  eristigimiz icin
int yaricap;                                      //public fonksiyonlara ulasabilirz
float alan;
float cevre;
public:
cember(int x=0,int y=0,int r=0){
setPoint(x,y);
setYaricap(r);
setAlan();
setCevre();
}
void setYaricap(int a) {yaricap=a;}
int getYaricap() {  return yaricap;}
void setAlan(){

alan=pi*getYaricap()*getYaricap();
}
float getAlan() {return alan;}

void setCevre(){

cevre=2*pi*yaricap;
}
float getCevre() {return cevre;}

void printInfo(cember t){ // tüm bilgileri goster

cout<<"Cemberin merkezi: "<
cout<<"Cemberin yaricapi: "<
cout<<"Cemberin alani: "<
cout<<"Cemberin cevresi: "<
}

};
class kure:public cember {

public:
kure(int a=0,int b=0,int c=0){
setYaricap(c);
setPoint(a,b);
hacim=(4/3)*pi*getYaricap()*getYaricap()*getYaricap(); //sayisal degerler
                                                                                             //dogru cıkmayabilir
}                                                          //int-float donusumunu ihmal ettigim icin
void setHacim(kure c){                                     //ugrasmak istemedim :)
hacim=(4/3)*pi*getYaricap()*getYaricap()*getYaricap();
}
float getHacim() {return hacim;}

void printKure(kure t) {

cout<<"Kurenin merkezi: "<
cout<<"Kurenin yaricapi: "<
cout<<"Kurenin hacmi: "<
}
private:
float hacim;

};

int main () {
point p;
cout<Pointe ait bilgiler"<

cout<<"\n";

cember test(3,4,5);
test.printInfo(test);
cout<<"\n";


kure deneme(0,0,10);      
deneme.printKure(deneme);

//deneme.printInfo(deneme);

/*cember sınıfına ozelmis gibi dusunulse de kure sınıfı
cemberden turedigi icin problem olmayacaktır
gerekli ortak bilgilere erisip bilgileri yazabilir*/

system("PAUSE");
return 0;
}

9 Nisan 2012 Pazartesi

C++ Inheritance(kalıtım) örneği



/* Cüneyt Çarıkçi 09/04/12*/ //  Basit kalıtım örneği
#include
using namespace std;
class Calisan{
char isim[30];
int yas;

public:
 Calisan(char ad[]="isim_yok",int y=0){
 strcpy(isim,ad);
 yas=y;
 }
 ~Calisan(){}
 void setIsim (char b[]){
 strcpy(isim,b);
 }
 char* getIsim(){return isim;}
 int getYas(){return yas;}
 void setYas(int a) {
 yas=a;
 }

};
class memur:public Calisan{// Calisan snıfndan memur türet
public:
memur(char ad[]="isim_yok",int y=0,char yer[]="gorev_yeri_girilmemis"){

    setIsim(ad);
 setYas(y);
 strcpy(gorevYeri,yer);
 }
 ~memur(){}
 char* getGorevYeri(){return gorevYeri;}

private:
 char gorevYeri[30];

};
int main () {
 memur cuno("Cuneyt Carikci",20,"Erzurum");  
 cout<<"Calisanin adi: "<return 0;
}