inline int max (int i1,int i2){
return(i1>i2) ? i1 : i2;
}
void GotoXY (int x, int y=wherey()){
goto(x,y);
}
.
GotoXY(1); //Bulundugu satırın başına
GotoXY(1,1); // (1,1) Noktasına
Başlangıç değerleri fonksiyon bildirimi (declaration) sırasında verilir. Birden fazla parametreye başlangıç değeri verilecekse, bu parametreler listenin sonunda yeralmalıdır.
int i;
int &j=i; // j ile i aynı adrese sahip
i=5;
j++; // i=6 oldu
void main()
{
int i=5;
hesap(i); // i değişmez
}
İşaretçi (pointer ) kullanarak çözüm
void hesap(int *j) {
*j=*j**j/2;
}
void main()
{
int i=5;
hesap(&i);
}
C++’ta referans kullanarak çözüm
void hesap(int &j){ j=j*j/2;}
void main()
{
int i=5;
hesap(i);
}
Burada fonksiyonun parametreyi değişken olarak aldığı kullanıcı programa saydamdır.
int x=1;
void f(){
int x=2; // Yerel x
::x++; // Dışarıdaki x
}
Sabit Tanımlama
C:
struct ComplexT{ // Karmaşık sayıları tanımlayan yapı
float re,im; // gerçel ve sanal kısımlar
};
void main()
{
ComplexT *cp=(ComplexT*) malloc (sizeof(ComplexT));
:
free(cp);
C++:
ComplexT *cp=new ComplexT;
:
delete cp;
struct ComplexT{
float re,im;
};
void print (float value){ // reel sayıları yazan print
printf("n val= %f", value);
}
void print (ComplexT c){ // Karmaşık sayıları yazan print
printf("n reel= %f im= %f", c.re,c.im);
}
void print (char c){ // Karakter yazan print
putchar(c);
}
void main(){
ComplexT z;
z.re=0.5;
z.im=1.2;
print(z);
print(4.2);
print('A');
}
Operatörlere Yeni İşevlerin Yüklenmesi
struct ComplexT{
float re,im;
};
ComplexT operator+ (ComplexT v1, ComplexT v2){
ComplexT result;
result.re=v1.re+v2.re;
result.im=v1.im+v2.im;
return result;
}
void main(){
ComplexT c1,c2,c3;
c3=c1+c2;
}
class nokta_sinifi{
int x,y; //x,y koordinatları NİTELİKLER
public:
void hareket(int,int); //yordamlar DAVRANIŞLAR
void ciz();
void sil();
};
Yordamların Gövdeleri:
void nokta_sinifi::hareket(int x_yeni, int y_yeni)
{
x=x_yeni;
y=y_yeni;
}
void nokta_sinifi::ciz()
{
putpixel(x,y,1);
setcolor(WHITE);
outtextxy(x+1,y+1,"NOKTA");
}
void nokta_sinifi::sil()
{
putpixel(x,y,0);
setcolor(BLACK);
outtextxy(x+1,y+1,"NOKTA");
}
Bir sınıftan nesne yaratmak, herhangi bir veri tipinden veri tanımlamak gibidir. Dışarıdan nesnenin yordamlarına ‘.’ ile erişilir.
void main()
{
nokta_sinifi nokta1; // nokta1 nesnesinin yaratılması
nokta1.hareket(50,50);
nokta1.ciz();
nokta1.sil();
nokta1.hareket(350,200);
nokta1.ciz();
nokta1.sil();
}
Nesne işaretçileri kullanarak:
void main()
{
nokta_sinifi *np = new nokta_sinifi; // np nesne işaretçisidir
np->hareket(50,50);
np->ciz();
p->sil();
}
Bir nesne iç durumu ve işlemleri ile tanımlanabilen bir varlıktır. İşlemleri yapan yordamlara metod, güncel yordam çağrılarına da mesaj adı verilir. Durum bir nesnenin kendine ait bilgileri hatırladığını ifade etmektedir. Bu nedenle metodlar, nesnenin içinde bulunduğu duruma göre her çağrıldıklarında farklı davranışlar gösterebilir.
void nokta_sinifi::hareket(int x_yeni, int y_yeni)
{
if(x_yeni > 0 && x_yeni < getmaxx()
&& y_yeni > 0 && y_yeni < getmaxy())
{
x=x_yeni;
y=y_yeni;
}
}
nokta1.x = -10; // Derleme Hatası: Erişim Yasaklanmıştır
#include<stdio.h>
class ComplexT{ // Kompleks Sayıları tanımalayan Sınıf
float re,im;
public:
void set(float re_in,float im_in){re=re_in;im=im_in;}
ComplexT operator+(ComplexT&); // + operatörünün fonksiyonu
void operator()(); // () operatörünün fonksiyonu
};
/** + operatörünün işlevini tanımlayan fonksiyon **/
ComplexT ComplexT::operator+(ComplexT& z)
{
ComplexT result;
result.re = re + z.re;
result.im = im + z.im;
return result;
}
/** () operatörünün işlevini tanımlayan fonksiyon **/
void ComplexT::operator()()
{
printf("n (%f , %f)",re,im);
}
void main()
{
ComplexT z1,z2,z3,z4;
z1.set(0.5,-3);
z2.set(2,1.5);
z3=z1+z2; // + operatörüne ilişkin fonksiyon canlanır
z3(); // () operatörüne ilişkin fonksiyon canlanır
z4=z1+z2+z3; // Önce result = z1 + z2 ardından z4 = result + z3
z4(); // () operatörüne ilişkin fonksiyon canlanır
}
Kurucu Fonksiyonlar (Constructor)
class ComplexT{
float re,im;
public:
ComplexT(){ // Kurucu Fonksiyon
re=0;
im=0;
}
};
Burada üye bir fonksiyonun, daha önce görüldüğünün aksine, gövdesinin de sınıf tanımı içinde yeraldığı görülmektedir. C++’ta bu şekilde yazılan fonksiyonlar inline olarak değerlendirilir.
void main()
{
ComplexT z1,z2; // Kurucu fonksiyon 2 defa canlanır
ComplexT *zp = new ComplexT; // Kurucu fonksiyon 1 defa canlanır
}
Bir değişik tipte ve sayıda parametreye sahip birden fazla kurucu fonksiyon olabilir.
class ComplexT{
float re,im;
public:
ComplexT(float re_in){re=re_in; im=0;}
ComplexT(float re_in,float im_in){re=re_in; im=im_in;}
: // Diger Fonksiyonlar....
};
void main()
{
ComplexT z1(0.3);
ComplexT z2(0.5 , 1.2);
ComplexT *zp=new ComplexT(0.4);
ComplexT z3; // HATA Parametresiz kurucu yok
}
class X {
public:
float a , b;
// yordamlar ....
};
X n = {1.1 , 2.2}; // n.a=1.1 n.b=2.2 olur.
Nesne Dizilerine Başlangıç Değerlerinin Atanması
class ComplexT{
float re, im;
public:
ComplexT(float, float);
};
ComplexT::ComplexT(float d1, float d2=1){
re = d1; im = d2;
}
void main(){
ComplexT s[ ]={ {1.1}, {3.3}, ComplexT(4.4,1.1)};
}
class stack{
int *top; // Yığın işaretçisi
int *bottom;
int num; // Yığındaki eleman sayısı
public:
stack(){top=bottom=new int[100];num=0;} // Kurucu
void push(int i)
{
if(num<100) {*top++=i;num++;} else printf("n Yigin Dolu");
}
int pop()
{
if(num>0) {num--; return *--top;} else printf("n Yigin Bos");
}
~stack(){delete bottom;} //Yok edici fonksiyon
};
void main()
{
stack s1,s2;
int a,b;
s1.push(5);
s1.push(8);
s2.push(4);
a=s1.pop();
b=s1.pop();
a=s2.pop();
:
}
class ComplexT{
float re,im;
public:
ComplexT(float re_in=0,float im_in=0){
re=re_in;
im=im_in;
}
void print() const{ // Sabit fonksiyon
printf("n sayi=%f , %f",re,im);
}
void sifirla(){re=im=0;} // Sabit olmayan fonksiyon
};
void main()
{
const ComplexT I(0,1); // Sabit nesne
ComplexT z(1.2,0.5) // Sabit olmayan nesne
I.print(); // Doğru
I.sifirla(); // HATA
z.sifirla(); // Doğru
}
class A{
char c;
static int i;
: // diğer üyeler
};
void main()
{
A p,q,r;
:
}
Static değişkenlere başlangıç değeri hiç bir nesne yaratılmadan önce verilmelidir. Bu değişkenlere başlangıç değeri atayacak fonksiyonlar da static olarak tanımlanmalıdır.
class A{
char c;
static int sayi; // A sınıfından yaratılan nesne sayısı
public:
static void baslangic(){sayi=0;}
A(){sayi++;} // Constructor
~A(){sayi--;} // Destructor
};
int A::sayi; // Bellekte yer ayırılıyor
void main()
{
A::baslangic(); // sayi=0 'static' fonksiyon çağırıldı
A a,b,c; // sayi=3; a,b,c nesnelerinin kurucuları çalışır
:
{
A d,e; // sayi=5 d,e nesnelerinin kurucuları çalışır
:
} // d,e nesnelerinin yok edicileri çalışır
: // sayi=3
} // a,b,c nesnelerinin yok edicileri çalışır
Static bir üye fonksiyon da, static üye veri gibi, nesnenin bir parçası olmaktan çok sınıfa aittir. Static üye fonksiyon herhangi bir nesne ile bağlantılı olmadan çağırılır. Bu fonksiyonlar yalnızca sınıfın tüm nesneleri tarafından paylaşılan verileri (static üye veriler ve global veriler) değiştirebilir. Static fonksiyonlar diğer üyeler ile aynı erişim haklarına sahip olmalarına rağmen, static olmayan üye verilere ve fonksiyonlara erişemezler. Çünkü üye bir fonksiyon içinde normalde nesnenin başlangıcına işaret etmesi gereken this işaretçisi, static bir fonksiyon içinde herhangi bir adrese işaret etmez.
0 Kullanıcı
Off Topic 2 gün önce
Sunucular 3 gün önce
Sunucular 3 hafta önce
Ultima Online 1 ay önce
Sunucular 2 ay önce
Sunucular 3 ay önce
Sphere Scripting 3 ay önce
CS 1.6 4 ay önce
Sunucular 5 ay önce
Sunucular 5 ay önce
Sunucular 5 ay önce
2024-09-26 14:21
2024-07-08 22:50
2024-07-08 22:34
2024-06-19 22:05
2024-06-01 02:19
2024-05-31 21:17
2024-04-09 16:53
2024-04-06 18:20