SlideShare a Scribd company logo
1 of 32
6. HAFTA
NESNEYE DAYALI PROGRAMLAMA
BLM225
Nesneye Dayalı Programlama
2
KBUZEM
Karabük Üniversitesi
Uzaktan Eğitim Araştırma ve Uygulama Merkezi
6. this işaretcisi
This işaretçisi özel bir işaretçi olup sınıf içinde yer alan fonksiyonların(metodların)
çağrılması halinde hangi nesne tarafından çağrıldığını bulmamızı sağlar.
Hatırlanacağı üzere bir sınıf bildirimi yapıldıktan sonra bu sınıftan istenildiği kadar
nesne tanımlanabilmekteydi. Nesnelerin verileri için farklı alanlar ayrılırken,
fonksiyonlar(metodlar) ortak kullanılmaktaydı. Bu durumda Bir fonksiyonun hangi
nesne tarafından kullanıldığı this işaretçisi ile kolayca bulunabilir.
#include <conio.h>
#include <iostream.h>
#include <iostream>
using namespace std;
class Kutu
{
public:
void adresgoster()
{
cout<< this << endl;
}
};
int main(void)
{
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
2
BLM225
Nesneye Dayalı Programlama
3
Kutu kt1;
cout<< &kt1 <<endl;
kt1.adresgoster();
getch();
return 0;
}
#include <conio.h>
#include <iostream.h>
#include <iostream>
using namespace std;
class Kutu
{
int a,b;
public:
void DegerVer(int,int);
void adresgoster()
{
cout<< this << endl;
}
};
void Kutu::DegerVer(int x, int y) {
a = x;
b = y;
}
int main(void)
{
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
3
BLM225
Nesneye Dayalı Programlama
4
Kutu kt1;
kt1.DegerVer(5,6);
cout<< &kt1 <<endl;
kt1.adresgoster();
getch();
return 0;
}
D1.Alan();
İfadesinde this işaretçisi D1 nesnesinin adresini tutacaktır.
D2.Alan()
ifadesinde ise this işaretçisi D2 nesnesinin adresini tutacaktır.
Aşağıda verilen programda Dortgen Sınıfından aşağıdaki gibi üç adet nesne
tanımlanmıştır. Dortgen sınıfına Buyuk() isminde bir fonksiyon(metod) daha
eklenmiştir. Buyuk() metodu parametre olarak Dortgen sınıfı türünden başka bir
nesneyi almakta ve geriye ya kendinsin yada gelen nesnenin adresini
döndürmektedir. Buyuk fonksiyonunun dönüş tipinin Dortgen türünden bir pointer
olduğuna dikkat ediniz.
Buyuk fonksiyonu alanı büyük olan nesnenin adresini geriye döndürmektedir. Burada
iki nesneden söz edildiğine dikkat ediniz. Birincisi Buyuk() metodunu çağıran nesne,
diğeri ise Buyuk() metoduna parametre olarak giren nesnedir.
Aşağıda verilen programda D2 nesnesi Buyuk fonksiyonunu çağırıyor. This işaretçisi
D2 in adresini tutar. D1 nesnesi parametre olarak Buyuk() fonksiyonuna giriyor. D3
işaretcisi bunlardan birinin adresini tutuyor. Dikkat ediniz.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
4
BLM225
Nesneye Dayalı Programlama
5
#include <iostream>
using namespace std;
class Dortgen {
public:
int x, y,gen,yuk ;
void DegerVer(int,int,int,int);
int Alan (void);
Dortgen *Buyuk(Dortgen &nesne);
};
void Dortgen::DegerVer(int a, int b, int g, int h) {
x = a;
y = b;
gen=g;
yuk=h;
}
int Dortgen::Alan (void) {
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
5
BLM225
Nesneye Dayalı Programlama
6
return gen*yuk;
}
Dortgen *Dortgen::Buyuk(Dortgen &nesne) {
int alan1, alan2;
alan1=yuk*gen;
alan2=nesne.yuk*nesne.gen;
if(alan1>alan2) return this;
else return &nesne;
}
int main ()
{
{
Dortgen D1,D2;
Dortgen *D3; //=new Dortgen; ???????
D1.DegerVer(3,4,7,90);
D2.DegerVer(7,2,65,60);
cout << "Alan1: " << D1.Alan()<<'n';
cout << "Alan2: " << D2.Alan()<<endl;
D3=D2.Buyuk(D1); //D2 nesnesi Buyuk fonksiyonunu Çağırıyor.
// D1 nesnesi parametre olarak giriyor
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
6
BLM225
Nesneye Dayalı Programlama
7
cout <<endl;
cout << "x= "<<D3->x<< " y= " << D3->y<< " Buyuk = " << D3-
>Alan()<<endl;
//delete D3; ????????
}
return 0;
}
#include <conio.h>
#include <iostream>
#include <list>
using namespace std;
class Packet{
private:
string type;
int source;
int dest;
int size;
public:
void setVariable(string, int, int,int);
string getType(){ return type;}
int getSourceId(){ return source;}
int getDestId(){ return dest;}
int getSize() { return size;}
void getMaxPacket(Packet);
void sendPacket(Packet);
};
void Packet::setVariable(string t, int s , int d, int sz)
{
type=t; source=s; dest=d, size=sz;
}
void Packet::getMaxPacket(Packet pt)
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
7
BLM225
Nesneye Dayalı Programlama
8
{
if (this->getSize() > pt.getSize())
sendPacket(*this);
else
sendPacket(pt);
}
void Packet::sendPacket(Packet pt)
{
cout<<pt.type<<" sent from "<< pt.source<< " to "<< pt.dest<< endl;
}
int main ()
{
Packet p1,p2;
p1.setVariable("routeRequest", 192,193,512);
p2.setVariable("routeRequest", 194,193,1024);
p1.getMaxPacket(p2);
getch();
return 0;
}
#include <conio.h>
#include <iostream.h>
#include <iostream>
using namespace std;
class Kutu
{
public:
// Constructor definition
Kutu(double uz=2.0, double gen=2.0, double yuk=2.0)
{
// cout <<"Constructor called." << endl;
uzunluk = uz;
genislik = gen;
yukseklik = yuk;
}
double hacim()
{
return uzunluk * genislik * yukseklik;
}
int compare(Kutu k)
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
8
BLM225
Nesneye Dayalı Programlama
9
{
return this->hacim() > k.hacim();
}
private:
double uzunluk; // Length of a box
double genislik; // Breadth of a box
double yukseklik; // Height of a box
};
int main(void)
{
Kutu kt1(9.0, 1.0, 2.0); // Declare box1
Kutu kt2(3.0, 1.0, 2.0); // Declare box2
if(kt1.compare(kt2))
//if(kt2.hacim() > kt1.hacim())
{
cout << "Kutu2 Kutu1 den daha kucuktur" <<endl;
}
else
{
cout << "Kutu2 Kutu1 e esit veya daha buyuktur" <<endl;
}
getch();
return 0;
}
#include <conio.h>
#include <iostream.h>
#include <iostream>
using namespace std;
class Kutu
{
public:
// Constructor definition
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
9
BLM225
Nesneye Dayalı Programlama
10
Kutu(double uz=2.0, double gen=2.0, double yuk=2.0)
{
// cout <<"Constructor called." << endl;
uzunluk = uz;
genislik = gen;
yukseklik = yuk;
}
double hacim()
{
return uzunluk * genislik * yukseklik;
}
/*
int compare(Kutu k)
{
return this->hacim() > k.hacim();
}
*/
private:
double uzunluk; // Length of a box
double genislik; // Breadth of a box
double yukseklik; // Height of a box
};
int main(void)
{
Kutu kt1(9.0, 1.0, 2.0); // Declare box1
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
10
BLM225
Nesneye Dayalı Programlama
11
Kutu kt2(3.0, 1.0, 2.0); // Declare box2
// if(kt1.compare(kt2))
if(kt2.hacim() < kt1.hacim())
{
cout << "Kutu2 Kutu1 den daha kucukturrrrrr" <<endl;
}
else
{
cout << "Kutu2 Kutu1 e esit veya daha buyuktur" <<endl;
}
getch();
return 0;
}
#include <conio.h>
#include <iostream>
using namespace std;
class Packet{
private:
string type;
int source;
int dest;
int size;
public:
void setValue(string,int,int,int);
void getMaxSize(Packet,Packet);
// void getMaxSize(Packet); //this
};
void Packet::setValue(string t, int s, int d, int sz)
{
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
11
BLM225
Nesneye Dayalı Programlama
12
type=t; source=s; dest=d; size=sz;
}
void Packet::getMaxSize(Packet pt1, Packet p)
//void Packet::getMaxSize(Packet p)//this
{
if (pt1.size>=p.size)
cout<<pt1.type<< " "<<pt1.source<<" "<<pt1.dest<<"
"<<pt1.size<<endl;
// if (this->size>=p.size)
// cout<<this->type<< " "<<this->source<<" "<<this->dest<<" "<<this-
>size<<endl;
else
cout<<p.type<< " "<<p.source<<" "<<p.dest<<" "<<p.size<<endl;
}
int main ()
{
Packet p1,p2;
p1.setValue("data",192,193,512);
p2.setValue("routeRequest",193,194,56);
// p1.getMaxSize(p2);//this
p1.getMaxSize(p1,p2);
getch();
return 0;
}
7.1. Sınıflarda arkadaşlık
#include <conio.h>
#include <iostream>
#include <list>
using namespace std;
class Packet{
private:
string type;
int source;
int dest;
int size;
public:
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
12
BLM225
Nesneye Dayalı Programlama
13
void degerVer(string t, int s, int d, int sz){
type=t; source=s; dest=d; size=sz;
}
friend class Node;
};
class Node{
int ip;
public:
void setValue(int i) {ip=i;}
void sendPacket(Packet);
};
void Node::sendPacket(Packet pt)
{
cout<<pt.type<<"turunde paket "<<pt.source<<" kaynagindan"<<endl;
cout<<pt.dest<<" hedefine gonderilmistir"<<endl;
}
int main ()
{
Packet p;
p.degerVer("routeRequest", 192, 193, 512);
Node n1,n2;
n1.setValue(192);
n2.setValue(193);
n1.sendPacket(p);
getch();
return 0;
}
#include <conio.h>
#include <iostream>
#include <list>
using namespace std;
class Node;
class Packet{
string type;
int source;
int dest;
int size;
public:
void degerVer(string t, int s, int d, int sz){
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
13
BLM225
Nesneye Dayalı Programlama
14
type=t; source=s; dest=d; size=sz;
}
void getNodeIp(Node);
friend class Node;
};
class Node{
int ip;
public:
void setValue(int i) {ip=i;}
void sendPacket(Packet);
friend class Packet;
};
void Packet::getNodeIp(Node n)
{
cout<<"Dugum ip si "<<n.ip<<endl;
}
void Node::sendPacket(Packet pt)
{
cout<<pt.type<<"turunde paket "<<pt.source<<" kaynagindan"<<endl;
cout<<pt.dest<<" hedefine gonderilmistir"<<endl;
}
int main ()
{
Packet p;
p.degerVer("routeRequest", 192, 193, 512);
Node n1,n2;
n1.setValue(192);
n2.setValue(193);
n1.sendPacket(p);
p.getNodeIp(n1);
getch();
return 0;
}
Sınıflar oluşturulurken bir sınıf veya herhangi bir fonksiyon bir başka sınıfın arkadaşı olarak
tanımlanabilir. Bu durumda arkadaş sınıf veya fonksiyon arkadaşı olduğu sınıfın üyelerine
erişebilir. Üyelerin public, private, veya protected olması fark etmez. Aşağıda verilen
programda DortgenKatla() fonksiyonu Dortgen sınıfının arkadaşı olarak belirtilmiştir.
Bunun için sınıf tanımı içinde bu sınıfın arkadaşı olacak fonksiyonun önüne friend ifadesinin
getirilmesi yeterlidir.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
14
BLM225
Nesneye Dayalı Programlama
15
#include <iostream>
using namespace std;
class Dortgen {
int x, y;
public:
void DegerVer(int,int);
int Alan (void);
friend Dortgen DortgenKatla (Dortgen); //bu fonksiyon Dortgen sınıfının
arkadaşı
};
void Dortgen::DegerVer(int a, int b) {
x = a;
y = b;
}
int Dortgen::Alan (void) {
return x*y;
}
//Bu fonksiyon normalde Dortgen sınıfının uyesi değil. D1 nesnesi Dortgen
sınıfından //olduğundan bu nesneye normalde erişemez. Ancak bu fonksiyon
aynı zamanda //arkadaş olarak bildirildiğinden sınıfın bütün üyelerine erişim
hakkı vardır.
Dortgen DortgenKatla (Dortgen D1)
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
15
BLM225
Nesneye Dayalı Programlama
16
{
Dortgen D2;
D2.x = D1.x*2;
D2.y = D1.y*2;
return (D2);
}
int main ()
{
Dortgen N1,N2;
N1.DegerVer(3,4); //N1 nesnesinin x ine 3 ve y sine 4 değeri atanır.
N2=DortgenKatla(N1); //N2 nesnesinin x ine 7 ve y sine 2 değeri atanır.
cout << "Alan1: " << N1.Alan()<<'n';
cout << "Alan2: " << N2.Alan()<<endl;
return 0;
}
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
16
BLM225
Nesneye Dayalı Programlama
17
Aşağıdaki örnekte Nesneler bir birinin katı olarak değer almakta ve ekrana yazdırılmaktadır.
İnceleyiniz.
#include <iostream>
using namespace std;
class Dortgen {
public:
int x, y;
void DegerVer(int,int);
int Alan (void);
friend Dortgen DortgenKatla (Dortgen); //bu fonksiyon Dortgen sınıfının
arkadaşı
};
void Dortgen::DegerVer(int a, int b) {
x = a;
y = b;
}
int Dortgen::Alan (void) {
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
17
BLM225
Nesneye Dayalı Programlama
18
return x*y;
}
//Bu fonksiyon normalde Dortgen sınıfının uyesi değil. D1 nesnesi Dortgen
sınıfından //olduğundan bu nesneye normalde erişemez. Ancak bu fonksiyon
aynı zamanda //arkadaş olarak bildirildiğinden sınıfın bütün üyelerine erişim
hakkı vardır.
Dortgen DortgenKatla (Dortgen D1)
{
Dortgen D2;
D2.x = D1.x*2;
D2.y = D1.y*2;
return (D2);
}
int main ()
{
Dortgen N1,N2;
N1.DegerVer(3,4); //N1 nesnesinin x ine 3 ve y sine 4 değeri atanır.
N2=DortgenKatla(N1); //N2 nesnesinin x ine 7 ve y sine 2 değeri atanır.
cout << "N1.X: " << N1.x<<endl;
cout << "N1.Y: " << N1.y<<endl;
cout << "N2.X: " << N2.x<<endl;
cout << "N2.Y: " << N2.y<<endl;
cout << "DortgenKatla(N2).X: " << DortgenKatla(N2).x<<endl;
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
18
BLM225
Nesneye Dayalı Programlama
19
cout << "DortgenKatla(N2).Y: " << DortgenKatla(N2).y<<endl;
cout << "N1.Alan: " << N1.Alan()<<'n';
cout << "N2.Alan: " << N2.Alan()<<endl;
cout << "DortgenKatla(N2).Alan: " << DortgenKatla(N2).Alan()<<endl;
return 0;
}
#include <conio.h>
#include <iostream>
#include <list>
using namespace std;
class Packet{
private:
string type;
int source;
int dest;
int size;
public:
void setVariable(string, int, int,int);
void getMaxPacket(Packet);
void sendPacket(Packet);
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
19
BLM225
Nesneye Dayalı Programlama
20
};
void Packet::setVariable(string t, int s , int d, int sz)
{
type=t; source=s; dest=d, size=sz;
}
void Packet::getMaxPacket(Packet pt)
{
if (this->size > pt.size)
sendPacket(*this);
else
sendPacket(pt);
}
void Packet::sendPacket(Packet pt)
{
cout<<pt.type<<" sent from "<< pt.source<< " to "<< pt.dest<< endl;
}
int main ()
{
Packet p1,p2;
p1.setVariable("routeRequest", 192,193,512);
p2.setVariable("routeRequest", 194,193,1024);
p1.getMaxPacket(p2);
getch();
return 0;
}
#include <conio.h>
#include <iostream>
#include <list>
using namespace std;
class Packet{
private:
string type;
int source;
int dest;
int size;
public:
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
20
BLM225
Nesneye Dayalı Programlama
21
void degerVer(string t, int s, int d, int sz){
type=t; source=s; dest=d; size=sz;
}
Packet maxSize(Packet); //
void sendPacket(Packet);
};
Packet Packet::maxSize(Packet pt2){ //
if (this->size >= pt2.size)
return *this; //
else
return pt2; //
}
void Packet::sendPacket(Packet p){
cout<<p.type<<" paketi " << p.source<< " kaynaktan ";
cout<< p.dest<<" hedefine gonderildi "<<endl;
}
int main ()
{
Packet p1,p2;
p1.degerVer("routeRequest", 192, 193, 512);
p2.degerVer("Data", 194, 195, 1024);
p1.sendPacket(p1.maxSize(p2)); //
getch();
return 0;
}
Aşağıda verilen programda ise Bir sınıf başka bir sınıfın arkadaşı olarak tanımlanmaktadır.
Dortgen sınıfı kare sınıfının arkadaşı olarak tanımlanmıştır.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
21
BLM225
Nesneye Dayalı Programlama
22
Arkadaşlık ilişkisi sınıflarda tek yönlüdür. Bu Dortgen sınıfının Kare sınıfının üyelerine erişip
kullanabileceğini ancak Kare sınıfının Dortgen sınıfının üyelerine erişemeyeceği anlamına
gelmektedir.
#include <iostream>
#include <conio.h>
using namespace std;
#include <conio.h>
#include <iostream.h>
#include <iostream>
using namespace std;
class Kare {
private:
int a;
public:
void DegerVer(int);
friend class Dortgen; //Dortgen sınıfı Kare sınıfının arkadaşı
};
class Dortgen {
int x, y;
public:
void DegerVer(int,int);
int Alan (void);
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
22
BLM225
Nesneye Dayalı Programlama
23
void Donustur (Kare); //Dortgen sınıfını kareye donuşturmektedir
};
void Kare::DegerVer(int k)
{
a=k ;
}
void Dortgen::Donustur (Kare K)
{
x = K.a;
y = K.a;
}
void Dortgen::DegerVer(int a, int b) {
x = a;
y = b;
}
int Dortgen::Alan (void) {
return x*y;
}
int main ()
{
Dortgen d;
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
23
BLM225
Nesneye Dayalı Programlama
24
Kare k;
d.DegerVer(3,4); //N1 nesnesinin x ine 3 ve y sine 4 değeri atanır.
cout << "Dortgenin alani: " << d.Alan()<<'n';
k.DegerVer(10);
d.Donustur(k);
cout << "Dortgenin alani " << d.Alan()<<'n';
getch();
return 0;
}
#include <conio.h>
#include <iostream>
using namespace std;
class Packet{
string type;
int source;
int dest;
public:
void degerVer(string t, int s, int d){
type=t; source=s; dest=d; }
friend class Node;
};
class Node{
int ip;
public:
void setValue(int i) {ip=i;}
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
24
BLM225
Nesneye Dayalı Programlama
25
void sendPacket(Packet);
};
void Node::sendPacket(Packet pt)
{
if(pt.type=="data")
cout<<pt.type<<" paketini derhal gonder"<<endl;
else
cout<<pt.type<<" paketi gecikme ile gonder"<<endl;
}
int main ()
{
Node n1,n2;
Packet p1,p2;
n1.setValue(192);
n2.setValue(193);
p1.degerVer("data",192,193);
p2.degerVer("routeRequest",192,193);
n1.sendPacket(p1);
n1.sendPacket(p2);
getch();
return 0;
}
#include <iostream>
#include <conio.h>
using namespace std;
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
25
BLM225
Nesneye Dayalı Programlama
26
class Dortgen {
int gen, yuk;
public:
void degerAta (int, int);
int alan () {return (gen * yuk);}
friend Dortgen kopyala (Dortgen);
};
void Dortgen::degerAta (int a, int b) {
gen = a;
yuk = b;
}
Dortgen kopyala (Dortgen drt)
{
Dortgen d;
d.gen = drt.gen;
d.yuk = drt.yuk;
return (d);
}
int main () {
Dortgen d1, d2;
d1.degerAta (2,3);
d2 = kopyala (d1);
cout << d2.alan();
getch();
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
26
BLM225
Nesneye Dayalı Programlama
27
return 0;
}
#include <conio.h>
#include <iostream>
using namespace std;
class sinif{
private:
int a; int b;
public:
sinif(int x, int y) {a=x; b=y;}
int size(){return a*b;}
void compare(sinif n)
{
if (this-
>size()>n.size())
cout<<"this nesnesi
buyuk"<<endl;
else
cout<<"esit veya
parametre nesnesi buyuk"<<endl;
}
};
int main ()
{
sinif nesne1(15,2);
sinif nesne2(10,5);
nesne1.compare(nesne2);
getch();
return 0;
}
#include <conio.h>
#include <iostream>
using namespace std;
class sinif {
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
27
BLM225
Nesneye Dayalı Programlama
28
int x,y;
public:
void func();
}nesne;
void sinif::func()
{
nesne.x = 100;
nesne.y = 500;
cout<<nesne.x<<endl;
cout<<nesne.y<<endl;
}
int main ()
{ sinif s;
s.func();
getch();
return 0;
}
#include <iostream>
#include <conio.h>
using namespace std;
class Sample {
int x,y;
friend void func();
}s;
void func()
{
s.x = 100;
s.y = 500;
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
28
BLM225
Nesneye Dayalı Programlama
29
cout<<s.x<<endl;
cout<<s.y<<endl;
}
int main(){
func();
getch();
return 0;
}
#include <conio.h>
#include <iostream>
using namespace std;
class Deneme{
private:
int x;
friend void ata();
}d;
void ata()
{
d.x=5;
cout<<d.x;
}
int main(){
ata();
getch();
return 0;
}
#include <conio.h>
#include <iostream>
using namespace std;
class sinif {
private:
int x,y;
public:
sinif(int i, int j){x=i;y=j;}
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
29
BLM225
Nesneye Dayalı Programlama
30
friend void func();
}n(5,2);
void func()
{
int a,b;
a=n.x; b=n.y;
cout<<a<<endl; cout<<b<<endl;
}
int main ()
{
func();
getch();
return 0;
}
Yukaridaki örnegi inceleyelim. Sample sinifinin x ve y isminde iki private veri elemani
bulunmaktadir. func isimli fonksiyon sinifin arkadas fonksiyonu olarak bildirilmistir. func
global bir fonksiyondur ancak func fonksiyonu içinde tanimlanan Sample sinifi türünden
nesnelerin private veri elemanlari için erisim sinirlamasi söz konusu olmayacaktır
#include <conio.h>
#include <iostream>
using namespace std;
class Packet{
private:
string type;
int source;
int dest;
int size;
public:
void setValue(string,int,int,int);
friend void getMaxSize(Packet, Packet);
};
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
30
BLM225
Nesneye Dayalı Programlama
31
void Packet::setValue(string t, int s, int d, int sz)
{
type=t; source=s; dest=d; size=sz;
}
void getMaxSize(Packet pt1, Packet p)
{
if (pt1.size>=p.size)
cout<<pt1.type<< " "<<pt1.source<<" "<<pt1.dest<<" "<<pt1.size<<endl;
else
cout<<p.type<< " "<<p.source<<" "<<p.dest<<" "<<p.size<<endl;
}
int main ()
{
Packet p1,p2;
p1.setValue("data",192,193,512);
p2.setValue("routeRequest",193,194,56);
getMaxSize(p1,p2);
getch();
return 0;
}
#include <conio.h>
#include <iostream>
using namespace std;
class Packet{
private:
string type;
int source;
int dest;
int size;
public:
void setValue(string,int,int,int);
string getType(){return type;}
friend Packet getMaxPacket(Packet,Packet);
};
void Packet::setValue(string t, int s, int d, int sz){
type=t; source=s; dest=d; size=sz;}
Packet getMaxPacket(Packet p1, Packet p2){
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
31
BLM225
Nesneye Dayalı Programlama
32
if(p1.size>=p2.size)
return p1;
else
return p2;
}
int main(){
Packet p1,p2;
p1.setValue("Data",192,193,24);
p2.setValue("routeRequest",195,196,72);
cout<<(getMaxPacket(p1,p2)).getType();
getch();
return 0;
}
#include <conio.h>
#include <iostream>
using namespace std;
class sinifA {
int ax, ay;
public:
sinifA(int a, int b){ax=a; ay=b;}
void size(){ cout<<ax*ay<<endl; }
friend class sinifB;
};
class sinifB {
int bx, by, bz;
public:
void size(sinifA s){bx=s.ax; by=s.ay;
bz=2; cout<<bx*by*bz<<endl;}
};
int main ()
{
sinifA nesneA(5,2);
nesneA.size();
sinifB nesneB;
nesneB.size(nesneA);
getch();
return 0;
}
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
32

More Related Content

What's hot

3. aşırı yükleme yaşam alanı - dinamik bellek kullanımı
3. aşırı yükleme   yaşam alanı - dinamik bellek kullanımı3. aşırı yükleme   yaşam alanı - dinamik bellek kullanımı
3. aşırı yükleme yaşam alanı - dinamik bellek kullanımıkarmuhtam
 
10. istisna isleme
10. istisna isleme10. istisna isleme
10. istisna islemekarmuhtam
 
13. sınıfları başlık dosyaları
13.  sınıfları başlık dosyaları13.  sınıfları başlık dosyaları
13. sınıfları başlık dosyalarıkarmuhtam
 
1. nesneye dayalı programlama giriş
1. nesneye dayalı programlama   giriş1. nesneye dayalı programlama   giriş
1. nesneye dayalı programlama girişkarmuhtam
 
Introduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFrameworkIntroduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFrameworkAnıl Sözeri
 
C#, Microsoft Yaz Okulu 2011 - İzmir
C#, Microsoft Yaz Okulu 2011 - İzmirC#, Microsoft Yaz Okulu 2011 - İzmir
C#, Microsoft Yaz Okulu 2011 - İzmirEnterprisecoding
 

What's hot (6)

3. aşırı yükleme yaşam alanı - dinamik bellek kullanımı
3. aşırı yükleme   yaşam alanı - dinamik bellek kullanımı3. aşırı yükleme   yaşam alanı - dinamik bellek kullanımı
3. aşırı yükleme yaşam alanı - dinamik bellek kullanımı
 
10. istisna isleme
10. istisna isleme10. istisna isleme
10. istisna isleme
 
13. sınıfları başlık dosyaları
13.  sınıfları başlık dosyaları13.  sınıfları başlık dosyaları
13. sınıfları başlık dosyaları
 
1. nesneye dayalı programlama giriş
1. nesneye dayalı programlama   giriş1. nesneye dayalı programlama   giriş
1. nesneye dayalı programlama giriş
 
Introduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFrameworkIntroduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFramework
 
C#, Microsoft Yaz Okulu 2011 - İzmir
C#, Microsoft Yaz Okulu 2011 - İzmirC#, Microsoft Yaz Okulu 2011 - İzmir
C#, Microsoft Yaz Okulu 2011 - İzmir
 

More from karmuhtam

Devre analizi deney malzeme listesi
Devre analizi deney malzeme listesiDevre analizi deney malzeme listesi
Devre analizi deney malzeme listesikarmuhtam
 
Deney 3 ve 4
Deney 3 ve 4Deney 3 ve 4
Deney 3 ve 4karmuhtam
 
Deney 1 ve 2
Deney 1 ve 2Deney 1 ve 2
Deney 1 ve 2karmuhtam
 
Data structure week y 5 1
Data structure week y 5 1Data structure week y 5 1
Data structure week y 5 1karmuhtam
 
Data structure week y 5
Data structure week y 5Data structure week y 5
Data structure week y 5karmuhtam
 
Data structure week y 4
Data structure week y 4Data structure week y 4
Data structure week y 4karmuhtam
 
Data structure week 3
Data structure week 3Data structure week 3
Data structure week 3karmuhtam
 
Data structure week 2
Data structure week 2Data structure week 2
Data structure week 2karmuhtam
 
Data structure week 1
Data structure week 1Data structure week 1
Data structure week 1karmuhtam
 
12. stl örnekler
12.  stl örnekler12.  stl örnekler
12. stl örneklerkarmuhtam
 
Devre analizi defter
Devre analizi defterDevre analizi defter
Devre analizi defterkarmuhtam
 
H8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-belleklerH8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-belleklerkarmuhtam
 
H8 blm221 (1)
H8 blm221 (1)H8 blm221 (1)
H8 blm221 (1)karmuhtam
 

More from karmuhtam (18)

Devre analizi deney malzeme listesi
Devre analizi deney malzeme listesiDevre analizi deney malzeme listesi
Devre analizi deney malzeme listesi
 
Deney 6
Deney 6Deney 6
Deney 6
 
Deney 5
Deney 5Deney 5
Deney 5
 
Deney 3 ve 4
Deney 3 ve 4Deney 3 ve 4
Deney 3 ve 4
 
Deney 1 ve 2
Deney 1 ve 2Deney 1 ve 2
Deney 1 ve 2
 
Data structure week y 5 1
Data structure week y 5 1Data structure week y 5 1
Data structure week y 5 1
 
Data structure week y 5
Data structure week y 5Data structure week y 5
Data structure week y 5
 
Data structure week y 4
Data structure week y 4Data structure week y 4
Data structure week y 4
 
Data structure week 3
Data structure week 3Data structure week 3
Data structure week 3
 
Data structure week 2
Data structure week 2Data structure week 2
Data structure week 2
 
Data structure week 1
Data structure week 1Data structure week 1
Data structure week 1
 
12. stl örnekler
12.  stl örnekler12.  stl örnekler
12. stl örnekler
 
Devre analizi defter
Devre analizi defterDevre analizi defter
Devre analizi defter
 
H12 blm221
H12 blm221H12 blm221
H12 blm221
 
H11 blm221
H11 blm221H11 blm221
H11 blm221
 
H9 blm221
H9 blm221H9 blm221
H9 blm221
 
H8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-belleklerH8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-bellekler
 
H8 blm221 (1)
H8 blm221 (1)H8 blm221 (1)
H8 blm221 (1)
 

6. this işaretçisi ve arkadaşlık

  • 2. BLM225 Nesneye Dayalı Programlama 2 KBUZEM Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi 6. this işaretcisi This işaretçisi özel bir işaretçi olup sınıf içinde yer alan fonksiyonların(metodların) çağrılması halinde hangi nesne tarafından çağrıldığını bulmamızı sağlar. Hatırlanacağı üzere bir sınıf bildirimi yapıldıktan sonra bu sınıftan istenildiği kadar nesne tanımlanabilmekteydi. Nesnelerin verileri için farklı alanlar ayrılırken, fonksiyonlar(metodlar) ortak kullanılmaktaydı. Bu durumda Bir fonksiyonun hangi nesne tarafından kullanıldığı this işaretçisi ile kolayca bulunabilir. #include <conio.h> #include <iostream.h> #include <iostream> using namespace std; class Kutu { public: void adresgoster() { cout<< this << endl; } }; int main(void) { Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 2
  • 3. BLM225 Nesneye Dayalı Programlama 3 Kutu kt1; cout<< &kt1 <<endl; kt1.adresgoster(); getch(); return 0; } #include <conio.h> #include <iostream.h> #include <iostream> using namespace std; class Kutu { int a,b; public: void DegerVer(int,int); void adresgoster() { cout<< this << endl; } }; void Kutu::DegerVer(int x, int y) { a = x; b = y; } int main(void) { Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 3
  • 4. BLM225 Nesneye Dayalı Programlama 4 Kutu kt1; kt1.DegerVer(5,6); cout<< &kt1 <<endl; kt1.adresgoster(); getch(); return 0; } D1.Alan(); İfadesinde this işaretçisi D1 nesnesinin adresini tutacaktır. D2.Alan() ifadesinde ise this işaretçisi D2 nesnesinin adresini tutacaktır. Aşağıda verilen programda Dortgen Sınıfından aşağıdaki gibi üç adet nesne tanımlanmıştır. Dortgen sınıfına Buyuk() isminde bir fonksiyon(metod) daha eklenmiştir. Buyuk() metodu parametre olarak Dortgen sınıfı türünden başka bir nesneyi almakta ve geriye ya kendinsin yada gelen nesnenin adresini döndürmektedir. Buyuk fonksiyonunun dönüş tipinin Dortgen türünden bir pointer olduğuna dikkat ediniz. Buyuk fonksiyonu alanı büyük olan nesnenin adresini geriye döndürmektedir. Burada iki nesneden söz edildiğine dikkat ediniz. Birincisi Buyuk() metodunu çağıran nesne, diğeri ise Buyuk() metoduna parametre olarak giren nesnedir. Aşağıda verilen programda D2 nesnesi Buyuk fonksiyonunu çağırıyor. This işaretçisi D2 in adresini tutar. D1 nesnesi parametre olarak Buyuk() fonksiyonuna giriyor. D3 işaretcisi bunlardan birinin adresini tutuyor. Dikkat ediniz. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 4
  • 5. BLM225 Nesneye Dayalı Programlama 5 #include <iostream> using namespace std; class Dortgen { public: int x, y,gen,yuk ; void DegerVer(int,int,int,int); int Alan (void); Dortgen *Buyuk(Dortgen &nesne); }; void Dortgen::DegerVer(int a, int b, int g, int h) { x = a; y = b; gen=g; yuk=h; } int Dortgen::Alan (void) { Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 5
  • 6. BLM225 Nesneye Dayalı Programlama 6 return gen*yuk; } Dortgen *Dortgen::Buyuk(Dortgen &nesne) { int alan1, alan2; alan1=yuk*gen; alan2=nesne.yuk*nesne.gen; if(alan1>alan2) return this; else return &nesne; } int main () { { Dortgen D1,D2; Dortgen *D3; //=new Dortgen; ??????? D1.DegerVer(3,4,7,90); D2.DegerVer(7,2,65,60); cout << "Alan1: " << D1.Alan()<<'n'; cout << "Alan2: " << D2.Alan()<<endl; D3=D2.Buyuk(D1); //D2 nesnesi Buyuk fonksiyonunu Çağırıyor. // D1 nesnesi parametre olarak giriyor Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 6
  • 7. BLM225 Nesneye Dayalı Programlama 7 cout <<endl; cout << "x= "<<D3->x<< " y= " << D3->y<< " Buyuk = " << D3- >Alan()<<endl; //delete D3; ???????? } return 0; } #include <conio.h> #include <iostream> #include <list> using namespace std; class Packet{ private: string type; int source; int dest; int size; public: void setVariable(string, int, int,int); string getType(){ return type;} int getSourceId(){ return source;} int getDestId(){ return dest;} int getSize() { return size;} void getMaxPacket(Packet); void sendPacket(Packet); }; void Packet::setVariable(string t, int s , int d, int sz) { type=t; source=s; dest=d, size=sz; } void Packet::getMaxPacket(Packet pt) Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 7
  • 8. BLM225 Nesneye Dayalı Programlama 8 { if (this->getSize() > pt.getSize()) sendPacket(*this); else sendPacket(pt); } void Packet::sendPacket(Packet pt) { cout<<pt.type<<" sent from "<< pt.source<< " to "<< pt.dest<< endl; } int main () { Packet p1,p2; p1.setVariable("routeRequest", 192,193,512); p2.setVariable("routeRequest", 194,193,1024); p1.getMaxPacket(p2); getch(); return 0; } #include <conio.h> #include <iostream.h> #include <iostream> using namespace std; class Kutu { public: // Constructor definition Kutu(double uz=2.0, double gen=2.0, double yuk=2.0) { // cout <<"Constructor called." << endl; uzunluk = uz; genislik = gen; yukseklik = yuk; } double hacim() { return uzunluk * genislik * yukseklik; } int compare(Kutu k) Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 8
  • 9. BLM225 Nesneye Dayalı Programlama 9 { return this->hacim() > k.hacim(); } private: double uzunluk; // Length of a box double genislik; // Breadth of a box double yukseklik; // Height of a box }; int main(void) { Kutu kt1(9.0, 1.0, 2.0); // Declare box1 Kutu kt2(3.0, 1.0, 2.0); // Declare box2 if(kt1.compare(kt2)) //if(kt2.hacim() > kt1.hacim()) { cout << "Kutu2 Kutu1 den daha kucuktur" <<endl; } else { cout << "Kutu2 Kutu1 e esit veya daha buyuktur" <<endl; } getch(); return 0; } #include <conio.h> #include <iostream.h> #include <iostream> using namespace std; class Kutu { public: // Constructor definition Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 9
  • 10. BLM225 Nesneye Dayalı Programlama 10 Kutu(double uz=2.0, double gen=2.0, double yuk=2.0) { // cout <<"Constructor called." << endl; uzunluk = uz; genislik = gen; yukseklik = yuk; } double hacim() { return uzunluk * genislik * yukseklik; } /* int compare(Kutu k) { return this->hacim() > k.hacim(); } */ private: double uzunluk; // Length of a box double genislik; // Breadth of a box double yukseklik; // Height of a box }; int main(void) { Kutu kt1(9.0, 1.0, 2.0); // Declare box1 Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 10
  • 11. BLM225 Nesneye Dayalı Programlama 11 Kutu kt2(3.0, 1.0, 2.0); // Declare box2 // if(kt1.compare(kt2)) if(kt2.hacim() < kt1.hacim()) { cout << "Kutu2 Kutu1 den daha kucukturrrrrr" <<endl; } else { cout << "Kutu2 Kutu1 e esit veya daha buyuktur" <<endl; } getch(); return 0; } #include <conio.h> #include <iostream> using namespace std; class Packet{ private: string type; int source; int dest; int size; public: void setValue(string,int,int,int); void getMaxSize(Packet,Packet); // void getMaxSize(Packet); //this }; void Packet::setValue(string t, int s, int d, int sz) { Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 11
  • 12. BLM225 Nesneye Dayalı Programlama 12 type=t; source=s; dest=d; size=sz; } void Packet::getMaxSize(Packet pt1, Packet p) //void Packet::getMaxSize(Packet p)//this { if (pt1.size>=p.size) cout<<pt1.type<< " "<<pt1.source<<" "<<pt1.dest<<" "<<pt1.size<<endl; // if (this->size>=p.size) // cout<<this->type<< " "<<this->source<<" "<<this->dest<<" "<<this- >size<<endl; else cout<<p.type<< " "<<p.source<<" "<<p.dest<<" "<<p.size<<endl; } int main () { Packet p1,p2; p1.setValue("data",192,193,512); p2.setValue("routeRequest",193,194,56); // p1.getMaxSize(p2);//this p1.getMaxSize(p1,p2); getch(); return 0; } 7.1. Sınıflarda arkadaşlık #include <conio.h> #include <iostream> #include <list> using namespace std; class Packet{ private: string type; int source; int dest; int size; public: Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 12
  • 13. BLM225 Nesneye Dayalı Programlama 13 void degerVer(string t, int s, int d, int sz){ type=t; source=s; dest=d; size=sz; } friend class Node; }; class Node{ int ip; public: void setValue(int i) {ip=i;} void sendPacket(Packet); }; void Node::sendPacket(Packet pt) { cout<<pt.type<<"turunde paket "<<pt.source<<" kaynagindan"<<endl; cout<<pt.dest<<" hedefine gonderilmistir"<<endl; } int main () { Packet p; p.degerVer("routeRequest", 192, 193, 512); Node n1,n2; n1.setValue(192); n2.setValue(193); n1.sendPacket(p); getch(); return 0; } #include <conio.h> #include <iostream> #include <list> using namespace std; class Node; class Packet{ string type; int source; int dest; int size; public: void degerVer(string t, int s, int d, int sz){ Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 13
  • 14. BLM225 Nesneye Dayalı Programlama 14 type=t; source=s; dest=d; size=sz; } void getNodeIp(Node); friend class Node; }; class Node{ int ip; public: void setValue(int i) {ip=i;} void sendPacket(Packet); friend class Packet; }; void Packet::getNodeIp(Node n) { cout<<"Dugum ip si "<<n.ip<<endl; } void Node::sendPacket(Packet pt) { cout<<pt.type<<"turunde paket "<<pt.source<<" kaynagindan"<<endl; cout<<pt.dest<<" hedefine gonderilmistir"<<endl; } int main () { Packet p; p.degerVer("routeRequest", 192, 193, 512); Node n1,n2; n1.setValue(192); n2.setValue(193); n1.sendPacket(p); p.getNodeIp(n1); getch(); return 0; } Sınıflar oluşturulurken bir sınıf veya herhangi bir fonksiyon bir başka sınıfın arkadaşı olarak tanımlanabilir. Bu durumda arkadaş sınıf veya fonksiyon arkadaşı olduğu sınıfın üyelerine erişebilir. Üyelerin public, private, veya protected olması fark etmez. Aşağıda verilen programda DortgenKatla() fonksiyonu Dortgen sınıfının arkadaşı olarak belirtilmiştir. Bunun için sınıf tanımı içinde bu sınıfın arkadaşı olacak fonksiyonun önüne friend ifadesinin getirilmesi yeterlidir. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 14
  • 15. BLM225 Nesneye Dayalı Programlama 15 #include <iostream> using namespace std; class Dortgen { int x, y; public: void DegerVer(int,int); int Alan (void); friend Dortgen DortgenKatla (Dortgen); //bu fonksiyon Dortgen sınıfının arkadaşı }; void Dortgen::DegerVer(int a, int b) { x = a; y = b; } int Dortgen::Alan (void) { return x*y; } //Bu fonksiyon normalde Dortgen sınıfının uyesi değil. D1 nesnesi Dortgen sınıfından //olduğundan bu nesneye normalde erişemez. Ancak bu fonksiyon aynı zamanda //arkadaş olarak bildirildiğinden sınıfın bütün üyelerine erişim hakkı vardır. Dortgen DortgenKatla (Dortgen D1) Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 15
  • 16. BLM225 Nesneye Dayalı Programlama 16 { Dortgen D2; D2.x = D1.x*2; D2.y = D1.y*2; return (D2); } int main () { Dortgen N1,N2; N1.DegerVer(3,4); //N1 nesnesinin x ine 3 ve y sine 4 değeri atanır. N2=DortgenKatla(N1); //N2 nesnesinin x ine 7 ve y sine 2 değeri atanır. cout << "Alan1: " << N1.Alan()<<'n'; cout << "Alan2: " << N2.Alan()<<endl; return 0; } Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 16
  • 17. BLM225 Nesneye Dayalı Programlama 17 Aşağıdaki örnekte Nesneler bir birinin katı olarak değer almakta ve ekrana yazdırılmaktadır. İnceleyiniz. #include <iostream> using namespace std; class Dortgen { public: int x, y; void DegerVer(int,int); int Alan (void); friend Dortgen DortgenKatla (Dortgen); //bu fonksiyon Dortgen sınıfının arkadaşı }; void Dortgen::DegerVer(int a, int b) { x = a; y = b; } int Dortgen::Alan (void) { Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 17
  • 18. BLM225 Nesneye Dayalı Programlama 18 return x*y; } //Bu fonksiyon normalde Dortgen sınıfının uyesi değil. D1 nesnesi Dortgen sınıfından //olduğundan bu nesneye normalde erişemez. Ancak bu fonksiyon aynı zamanda //arkadaş olarak bildirildiğinden sınıfın bütün üyelerine erişim hakkı vardır. Dortgen DortgenKatla (Dortgen D1) { Dortgen D2; D2.x = D1.x*2; D2.y = D1.y*2; return (D2); } int main () { Dortgen N1,N2; N1.DegerVer(3,4); //N1 nesnesinin x ine 3 ve y sine 4 değeri atanır. N2=DortgenKatla(N1); //N2 nesnesinin x ine 7 ve y sine 2 değeri atanır. cout << "N1.X: " << N1.x<<endl; cout << "N1.Y: " << N1.y<<endl; cout << "N2.X: " << N2.x<<endl; cout << "N2.Y: " << N2.y<<endl; cout << "DortgenKatla(N2).X: " << DortgenKatla(N2).x<<endl; Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 18
  • 19. BLM225 Nesneye Dayalı Programlama 19 cout << "DortgenKatla(N2).Y: " << DortgenKatla(N2).y<<endl; cout << "N1.Alan: " << N1.Alan()<<'n'; cout << "N2.Alan: " << N2.Alan()<<endl; cout << "DortgenKatla(N2).Alan: " << DortgenKatla(N2).Alan()<<endl; return 0; } #include <conio.h> #include <iostream> #include <list> using namespace std; class Packet{ private: string type; int source; int dest; int size; public: void setVariable(string, int, int,int); void getMaxPacket(Packet); void sendPacket(Packet); Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 19
  • 20. BLM225 Nesneye Dayalı Programlama 20 }; void Packet::setVariable(string t, int s , int d, int sz) { type=t; source=s; dest=d, size=sz; } void Packet::getMaxPacket(Packet pt) { if (this->size > pt.size) sendPacket(*this); else sendPacket(pt); } void Packet::sendPacket(Packet pt) { cout<<pt.type<<" sent from "<< pt.source<< " to "<< pt.dest<< endl; } int main () { Packet p1,p2; p1.setVariable("routeRequest", 192,193,512); p2.setVariable("routeRequest", 194,193,1024); p1.getMaxPacket(p2); getch(); return 0; } #include <conio.h> #include <iostream> #include <list> using namespace std; class Packet{ private: string type; int source; int dest; int size; public: Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 20
  • 21. BLM225 Nesneye Dayalı Programlama 21 void degerVer(string t, int s, int d, int sz){ type=t; source=s; dest=d; size=sz; } Packet maxSize(Packet); // void sendPacket(Packet); }; Packet Packet::maxSize(Packet pt2){ // if (this->size >= pt2.size) return *this; // else return pt2; // } void Packet::sendPacket(Packet p){ cout<<p.type<<" paketi " << p.source<< " kaynaktan "; cout<< p.dest<<" hedefine gonderildi "<<endl; } int main () { Packet p1,p2; p1.degerVer("routeRequest", 192, 193, 512); p2.degerVer("Data", 194, 195, 1024); p1.sendPacket(p1.maxSize(p2)); // getch(); return 0; } Aşağıda verilen programda ise Bir sınıf başka bir sınıfın arkadaşı olarak tanımlanmaktadır. Dortgen sınıfı kare sınıfının arkadaşı olarak tanımlanmıştır. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 21
  • 22. BLM225 Nesneye Dayalı Programlama 22 Arkadaşlık ilişkisi sınıflarda tek yönlüdür. Bu Dortgen sınıfının Kare sınıfının üyelerine erişip kullanabileceğini ancak Kare sınıfının Dortgen sınıfının üyelerine erişemeyeceği anlamına gelmektedir. #include <iostream> #include <conio.h> using namespace std; #include <conio.h> #include <iostream.h> #include <iostream> using namespace std; class Kare { private: int a; public: void DegerVer(int); friend class Dortgen; //Dortgen sınıfı Kare sınıfının arkadaşı }; class Dortgen { int x, y; public: void DegerVer(int,int); int Alan (void); Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 22
  • 23. BLM225 Nesneye Dayalı Programlama 23 void Donustur (Kare); //Dortgen sınıfını kareye donuşturmektedir }; void Kare::DegerVer(int k) { a=k ; } void Dortgen::Donustur (Kare K) { x = K.a; y = K.a; } void Dortgen::DegerVer(int a, int b) { x = a; y = b; } int Dortgen::Alan (void) { return x*y; } int main () { Dortgen d; Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 23
  • 24. BLM225 Nesneye Dayalı Programlama 24 Kare k; d.DegerVer(3,4); //N1 nesnesinin x ine 3 ve y sine 4 değeri atanır. cout << "Dortgenin alani: " << d.Alan()<<'n'; k.DegerVer(10); d.Donustur(k); cout << "Dortgenin alani " << d.Alan()<<'n'; getch(); return 0; } #include <conio.h> #include <iostream> using namespace std; class Packet{ string type; int source; int dest; public: void degerVer(string t, int s, int d){ type=t; source=s; dest=d; } friend class Node; }; class Node{ int ip; public: void setValue(int i) {ip=i;} Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 24
  • 25. BLM225 Nesneye Dayalı Programlama 25 void sendPacket(Packet); }; void Node::sendPacket(Packet pt) { if(pt.type=="data") cout<<pt.type<<" paketini derhal gonder"<<endl; else cout<<pt.type<<" paketi gecikme ile gonder"<<endl; } int main () { Node n1,n2; Packet p1,p2; n1.setValue(192); n2.setValue(193); p1.degerVer("data",192,193); p2.degerVer("routeRequest",192,193); n1.sendPacket(p1); n1.sendPacket(p2); getch(); return 0; } #include <iostream> #include <conio.h> using namespace std; Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 25
  • 26. BLM225 Nesneye Dayalı Programlama 26 class Dortgen { int gen, yuk; public: void degerAta (int, int); int alan () {return (gen * yuk);} friend Dortgen kopyala (Dortgen); }; void Dortgen::degerAta (int a, int b) { gen = a; yuk = b; } Dortgen kopyala (Dortgen drt) { Dortgen d; d.gen = drt.gen; d.yuk = drt.yuk; return (d); } int main () { Dortgen d1, d2; d1.degerAta (2,3); d2 = kopyala (d1); cout << d2.alan(); getch(); Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 26
  • 27. BLM225 Nesneye Dayalı Programlama 27 return 0; } #include <conio.h> #include <iostream> using namespace std; class sinif{ private: int a; int b; public: sinif(int x, int y) {a=x; b=y;} int size(){return a*b;} void compare(sinif n) { if (this- >size()>n.size()) cout<<"this nesnesi buyuk"<<endl; else cout<<"esit veya parametre nesnesi buyuk"<<endl; } }; int main () { sinif nesne1(15,2); sinif nesne2(10,5); nesne1.compare(nesne2); getch(); return 0; } #include <conio.h> #include <iostream> using namespace std; class sinif { Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 27
  • 28. BLM225 Nesneye Dayalı Programlama 28 int x,y; public: void func(); }nesne; void sinif::func() { nesne.x = 100; nesne.y = 500; cout<<nesne.x<<endl; cout<<nesne.y<<endl; } int main () { sinif s; s.func(); getch(); return 0; } #include <iostream> #include <conio.h> using namespace std; class Sample { int x,y; friend void func(); }s; void func() { s.x = 100; s.y = 500; Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 28
  • 29. BLM225 Nesneye Dayalı Programlama 29 cout<<s.x<<endl; cout<<s.y<<endl; } int main(){ func(); getch(); return 0; } #include <conio.h> #include <iostream> using namespace std; class Deneme{ private: int x; friend void ata(); }d; void ata() { d.x=5; cout<<d.x; } int main(){ ata(); getch(); return 0; } #include <conio.h> #include <iostream> using namespace std; class sinif { private: int x,y; public: sinif(int i, int j){x=i;y=j;} Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 29
  • 30. BLM225 Nesneye Dayalı Programlama 30 friend void func(); }n(5,2); void func() { int a,b; a=n.x; b=n.y; cout<<a<<endl; cout<<b<<endl; } int main () { func(); getch(); return 0; } Yukaridaki örnegi inceleyelim. Sample sinifinin x ve y isminde iki private veri elemani bulunmaktadir. func isimli fonksiyon sinifin arkadas fonksiyonu olarak bildirilmistir. func global bir fonksiyondur ancak func fonksiyonu içinde tanimlanan Sample sinifi türünden nesnelerin private veri elemanlari için erisim sinirlamasi söz konusu olmayacaktır #include <conio.h> #include <iostream> using namespace std; class Packet{ private: string type; int source; int dest; int size; public: void setValue(string,int,int,int); friend void getMaxSize(Packet, Packet); }; Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 30
  • 31. BLM225 Nesneye Dayalı Programlama 31 void Packet::setValue(string t, int s, int d, int sz) { type=t; source=s; dest=d; size=sz; } void getMaxSize(Packet pt1, Packet p) { if (pt1.size>=p.size) cout<<pt1.type<< " "<<pt1.source<<" "<<pt1.dest<<" "<<pt1.size<<endl; else cout<<p.type<< " "<<p.source<<" "<<p.dest<<" "<<p.size<<endl; } int main () { Packet p1,p2; p1.setValue("data",192,193,512); p2.setValue("routeRequest",193,194,56); getMaxSize(p1,p2); getch(); return 0; } #include <conio.h> #include <iostream> using namespace std; class Packet{ private: string type; int source; int dest; int size; public: void setValue(string,int,int,int); string getType(){return type;} friend Packet getMaxPacket(Packet,Packet); }; void Packet::setValue(string t, int s, int d, int sz){ type=t; source=s; dest=d; size=sz;} Packet getMaxPacket(Packet p1, Packet p2){ Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 31
  • 32. BLM225 Nesneye Dayalı Programlama 32 if(p1.size>=p2.size) return p1; else return p2; } int main(){ Packet p1,p2; p1.setValue("Data",192,193,24); p2.setValue("routeRequest",195,196,72); cout<<(getMaxPacket(p1,p2)).getType(); getch(); return 0; } #include <conio.h> #include <iostream> using namespace std; class sinifA { int ax, ay; public: sinifA(int a, int b){ax=a; ay=b;} void size(){ cout<<ax*ay<<endl; } friend class sinifB; }; class sinifB { int bx, by, bz; public: void size(sinifA s){bx=s.ax; by=s.ay; bz=2; cout<<bx*by*bz<<endl;} }; int main () { sinifA nesneA(5,2); nesneA.size(); sinifB nesneB; nesneB.size(nesneA); getch(); return 0; } Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 32