22 Şubat 2012, 15:04
|
#1 |
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
| İki matris ile işlem yapmak(Operator Overloading ile)
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. İki matris ile C++’da işlemler yapacağız. Fakat bu sefer alışılmışın dışında operetörler kullanacağız. Bu kodu daha rahat kavramamız için Operator Overloading ‘i anlatmak istiyorum. Peki nedir bu Operator Overloading? Normalde bir işlev üstlenen operatörlerin anlamlarına başka anlamları eklemektir. Mesela “+” işlemi normalde iki sayıyı toplamaya yararken biz iki stringi birleştirmeyi + işlemi ile yapabiliriz. Operator Overloading kendi yazdığımız class’a göre operatörü yeniden yazmamızı ve bu operatörlerle özel işlemler yapmamızı sağlar. Ancak tüm operatörler overload edilememektedir. Şimdi operatörleri sınıflandıralım ve hangilerinin overload edilebildiğini inceleyelim. Sınıflandırma Overload Edilebilirlik
+, -, *, /, %, &, |, <<, >> Binary Operatörler Tümü overload edilebilir
+, -, !, ~, ++, –, true, false Unary Operatörler Tümü overload edilebilir
==, !=, <, >, <= , >= Relational (İlişkisel) Operatörler Çiftler halinde overload edilebilir.
&&, || Logical Operatörler Overload Edilemez.
() Conversation Operatörler Overload Edilemez.
+=, -=, *=, /=, %= Bileşik Atama Operatörleri Overload Edilebilir. Binary operatörlerdeki değişiklikler bu operatörlere yansır.
=, . , ?:, ->, new, is, as, sizeof Overload Edilemez. Kod: Kodu kopyalamak için üzerine çift tıklayın! /*
Coding!
*/
#include<iostream>
#include <iomanip>
using namespace std;//std uzayini kullanmak
class matris{
public:
int m[3][3];
matris()//Bu tür fonsiyonlara kurucu fonksiyon denir.
//Program çalıştığı anda matrisin elemanlarına rastgele değer atar.
{
for(int a=0;a<3;a++)
for(int b=0;b<3;b++)
{
m[a][b]=rand()%10;
}
}
void yazdir()//Yazdirma fonksiyonu
{
for(int a=0;a<3;a++)
{
for(int b=0;b<3;b++)
{
cout<<setw(4)<< m[a][b];
}
cout<<endl;
}
}
matris operator+(matris gelen)//+ operatörüne Operator Overloading yapma
{
matris sonuc;
for(int a=0;a<3;a++)
{
for(int b=0;b<3;b++)
{
sonuc.m[a][b]=m[a][b]+gelen.m[a][b];
}
}
return sonuc;
}
matris operator-(matris gelen)//- operatörüne Operator Overloading yapma
{
matris sonuc;
for(int a=0;a<3;a++)
{
for(int b=0;b<3;b++)
{
sonuc.m[a][b]=m[a][b]-gelen.m[a][b];
}
}
return sonuc;
}
matris operator*(matris gelen)// * operatörüne Operator Overloading yapma
{
matris sonuc;
int toplam;
for(int a=0;a<3;a++)
{
for(int x=0;x<3;x++)
{
toplam=0;
for(int b=0;b<3;b++)
{
toplam+=m[a][b]*gelen.m[b][x];
}
sonuc.m[a][x]=toplam;
}
}
return sonuc;
}
};
int menu(){
int secenek;
cout<<endl<<setw(10)<<"MENU"<<endl;
cout<<"1-Toplama Islemi"<<endl;
cout<<"2-Cikarma Islemi"<<endl;
cout<<"3-Carpma Islemi"<<endl;
cout<<"4-Cikis"<<endl;
cout<<"Lutfen yapmak istediginiz secenegi giriniz.."<<endl;
cin>>secenek;
return secenek;
}
int main()
{
matris m1,m2,sonuc;
cout<<"Rasgele degerler atanmis 1. matris:"<<endl;
m1.yazdir();
cout<<endl;
cout<<"Rasgele degerler atanmis 2. matris:"<<endl;
m2.yazdir();
while(1)
{
switch(menu())
{
case 1:sonuc=m1+m2;cout<<"Toplama islemi yapilmistir."<<endl;sonuc.yazdir();break;
case 2:sonuc=m1-m2;cout<<"Cikarma islemi yapilmistir."<<endl;sonuc.yazdir();break;
case 3:sonuc=m1*m2;cout<<"Carpma islemi yapilmistir."<<endl;sonuc.yazdir();break;
case 4:exit(1);
}
}
return 0;
}
__________________ Doğruları biliyorsan, yalanları dinlemek eğlencelidir. |
| |