Bu yazıda C++’da İstisna İşleme ve Şablon konularından bahsedeceğim. Ayrıca konunun anlatımını kuvvetlendirmek için pek çok kod örneğine de yazı içerisinde yer verilmiştir.
İstisna İşleme
İstisna işlemeyi, programınızdaki istenmeyen durumlar için kullanabilirsiniz. Mesele bölme işlemi gerçekleştiren bir fonksiyonunuz varsa, işleme girecek değerlerin sayı / sıfır, sıfır / sayı , sıfır / sıfır belirsizliklerine sebep olmasını, istisna işleme ile hem engelleyebilir, hem de sorunun nerde olduğuyla ilgili geri bildirim oluşturabilirsiniz. Aşağıda örnek bir istisna işleme ifadesi kabaca gösterilmiştiler. Bu yapıda throw ile gönderilen değer catch yapısın içerisinde kullanılabilir.
try { if ( şart ) { throw fırlatılacak_değer;} } catch ( veri_türü değişken_adı ) { istisna_oluşunca_gerçekleştirilecek_işlem; }
Aşağıdaki örnekte, istisna işleme yapısı vasıtasıyla, uygun bir kullanıcı ismi oluşturulabilmesi için gerekli şartlar kontrol edilmiş ve kullanıcıya doğru yapıdaki bir kullanıcı ismi oluşturması için yönlendirme odaklı geri bildirimler verilmiştir.
#include<iostream>
void isim(std::string c) {
std::string a;
try {
if (c == "Admin") {
throw 1;
}
if (c == "admin") {
throw 2;
}
if (c == "18") {
throw 3;
}
if (c == "10") {
throw 4;
}
a = c;
std::cout << a;
}
catch (int e) {
std::cout << "hata" << e << std::endl;
if (e == 1) {
std::cout << "kullanıcı ismi Admin olamaz.";
}
if (e == 2) {
std::cout << "kullanıcı ismi admin olamaz.";
}
if (e == 3) {
std::cout << "kullanıcı ismi 18 olamaz.";
}
if (e == 4) {
std::cout << "kullanıcı ismi 10 olamaz.";
}
}
}
void main() {
std::string ad;
std::cin >> ad;
isim(ad);
}
Aşağıda birden fazla catch yapısına sahip bir istisna işleme örneği verilmiştir.
#include<iostream>
int Tryer(int a) {
try {
if (a == 1) {
throw 1;
}
if ( a < 1) {
throw "D";
}
return a*a*a*a;
}
catch (int e) {
std::cout << "error" << e;
}
catch (const char* d) {
std::cout << *d;
}
}
void main() {
float a;
std::cin >> a;
std::cout << Tryer(a);
}
Şablon
Şablon yapısı bir ifadenin başka şekillerde ele alınabilmesine olanak sağlayan bir yapıdır. Şablon yapısı aracılığıyla, benzer ifade guruplarının oluşturulmasını kolaylaştırabiliriz. Mesela int veri türünde değişkenler bekleyen bir toplama fonksiyonunu, şablon yapısı vasıtasıyla yazarak float gibi farklı veri türleriyle de çalışabilir hale getirebiliriz.
Şablon içerisinde birden fazla birbirinden farklı veri türü tanımlayabilirsiniz. Şablon içerisinde normal veri türü isimlerine de yer verebilirsiniz. İlgili şablonu çağırırken, şablonun kullanacağı veri türlerini kendiniz de tayin edebilirsiniz. Ayrıca şablonlar içerisinde işaretçi gibi yapılardan da faydalanabilirsiniz.
Aşağıda şablon yapısının fonksiyonlarla beraber kullanımına ilişkin bir örnek verilmiştir.
#include<iostream>
template < typename x, typename y >
void topal(x değer1, y değer2) {
std::cout << değer1 + değer2;
}
template < typename z,typename y>
y çıkar(int değer1, z değer2) {
return değer1 - değer2;
}
template < typename z>
void çarp(int değer1, z değer2) {
std::cout << değer1 * değer2;
}
void main() {
std::cout << çıkar <int, float>(3.5, 1);
topal <int,double>(1, 14.18);
çarp(5, 7);
çarp(9, 14.5);
çarp(50, 5.5f);
}
Aşağıda şablon yapısının sınıflarla beraber kullanımına ilişkin bir örnek verilmiştir.
#include<iostream>
template < typename x, typename y>
class islem {
public:
void topla(x a, y b) {
std::cout << a + b;
}
};
void main() {
islem <int, float> islem1;
islem <double, float> islem2;
islem1.topla(1,1.8);
islem2.topla(10.1546, 18.54);
}
Aşağıdaki örnekte şablon yapısı içerisinde, opr sınıfı bir değişken türü olarak kullanılmıştır.
#include<iostream>
class opr {
public:
std::string names;
};
template < typename x >
void name(x o) {
std::cout << o.names;
}
template < typename x >
x* adr(x o) {
return &o;
}
void main() {
opr opr1;
opr1.names = "ax";
name<opr>(opr1);
std::cout << adr<opr>(opr1);
}
Hi, I do believe this is an excellent site. I stumbledupon it 😉 I may come back yet again since i have book marked it. Money and freedom is the best way to change, may you be rich and continue to help other people.