Geri git   Van.GEN.TR Forum | Yerel Van Forumu > Bilgisayar > Programlama > Visual Basic, Delphi, C++ Ve Diğer Diller

Cevapla
 
Konu Araçları Stil
Alt 15/12/07, 12:50   #1
Bur2
Korgeneral
 
Bur2 - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: Oct 2007
Bulunduğu yer: evde :)
Yaş: 45
Mesajlar: 2.544
Tecrübe Puanı: 50 Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute Bur2 has a reputation beyond repute
Standart Isaretçi Tiplerini Degistirme

Aşağıdaki kodları öncelikle inceleyebilir, konu başlığı ile ilgili bir fikir edinme çabasında bulunabilirsiniz.
Ben de kodların aşağında, bu kodları adım adım açıklayacağım.
#include<iostream>
#include<typeinfo>
using namespace std;
/* Temel Sınıfımız */
class tsinif
{
protected:
int tdegisken;
public:
tsinif() : tdegisken(0) {}
tsinif(int t) : tdegisken(t) {}
virtual void sanal()
{}
void yazdir()
{cout<<"tdegisken : "<< tdegisken <<endl;}
};
/* Türetilmiş Sınıfımız */
class altsinif : public tsinif
{
private:
int altdegisken;
public:
altsinif() : altdegisken(0) {}
altsinif(int a,int b) : altdegisken(a)
{tdegisken = b;}
void yazdir()
{cout<<"altdegisken : "<< altdegisken <<endl;}
};
/*// MAIN Fonksiyonumuz //*/
int main()
{
tsinif *pTemel;
altsinif *pAlt;
pTemel = new tsinif(8);
pAlt = new altsinif(25,45);
pTemel = dynamic_cast<tsinif*>(pAlt);
pTemel->yazdir();
pTemel = new altsinif(18,37);
pAlt = dynamic_cast<altsinif*>(pTemel);
pAlt->yazdir();
system("pause");
}

Evet şimdi bu kodların ne işe yaradığını açıklayabiliriz.
#include<typeinfo> ile dynamic_cast operatörü için gerekli olan typeinfo başlık dosyasını ekliyoruz.
Ardından tsinif adında; temel sınıf vazifesi görecek olan sınıfımızı oluşturuyoruz. Sınıf değişkeninin protected olmasının nedeni türetilmiş sınıfın da bu değişkeni kullanacak olmasıdır.
tsinif() : tdegisken(0) {} kurucu fonksiyonu tanımladığımız tdegisken isimli değişkene 0 başlangıç değerini atıyor. Bu fonksiyon argüman almaz. Ancak bundan sonra gelen;
tsinif(int t) : tdegisken(t) {} kurucu fonksiyonu tek argümanlıdır. Bu fonksiyonu ise tdegisken e türetilmiş sınıf içerisinde değer atamakta kullanacağız.
virtual void sanal() {} ile temel sınıf olan tsinif içerisinde bir sanal fonksiyon oluşturulur. dynamic_cast kullanımı için temel sınıfta en az 1 tane sanal fonksiyon bulunması gerekir.Bu nedenle biz de sanal isminde sanal fonksiyonumuzu tanımladık.
Son olarak temel sınıfın - tdegisken in değerini ekrana yazdıracak olan - goster isimli üye fonksiyonunu tanımlıyoruz.
Sıra geldi türetilmiş sınıfa.. altsinif ismindeki sınıfı temel sınıfımız olan tsinif tan türetiyoruz. Ardından altdegisken isimli değişkeni, bu sefer private olarak tanımlıyor ve ilk değer olan 0 ı atıyoruz. Daha sonra ise iki argümanlı altsinif(int a,int b) kurucu fonksiyonu altdegisken i ilk argümana; tdegisken i aldığı ikinci argümana eşitliyor. Yine türetilmiş sınıfın sonunda, temel sınıftaki ile aynı işlevi görecek olan goster isimli üye fonksiyonu tanımladık.
Artık sıra main() fonksiyonunda ve dynamic_cast ile tip dönüşümlerini gerçekleştirmekte..
İlk başta temel sınıf ve türetilmiş sınıfa işaret eden pTemel ve pAlt değişkenlerimizi tanımlıyoruz ve bunlar için bellekte yer ayırıp (new) ait oldukları sınıfların kurucu fonksiyonları yardımı ile ilk değer atamasını yapıyoruz.
Evet. Yukarıda pAlt = new altsinif(25,45); yardımıyla temel sınıfın tsinif değişkeni 25, türetilmiş sınıfın altsinif değişkeni 45 değerini alıyor. Ve pAlt isimli türetilmiş sınıfa işaret eden değişken bu değerleri tutuyor.
Şimdiki aşamada dynamic_cast ile işaretçi tiplerini değiştireceğiz. Bu arada şuna değineyim: dynamic_cast kalıtımda yukarı veya aşağı doğru tip dönüşümü imkanı sağlar.Yukarı yönde dönüşüm türetilmiş sınıf nesnesini , temel sınıfın nesnesine dönüştürme anlamına gelir. Aşağı yönde dönüşüm de bunun tersidir.
dynamic_cast ile dönüşümü pTemel = dynamic_cast<tsinif*>(pAlt); kullanarak sağladık. Burada pTemel artık; pAlt değişkeninin tuttuğu; temel sınıfın parçasına işaret eder. Yukarıda ; pAlt = new altsinif(25,45); ile temel sınıfın tdegisken isimli üye değişkenine ikinci argümanı, yani 45 değerini atamıştık. pTemel'in pAlt içindeki temel sınıf parçasına işaret ettiğinde bu değere sahip olmuş olur ve pTemel->yazdir(); kullanarak ekrana yazdırdığımızda şu çıktıyı görürsünüz:
tdegisken : 45
Yukarı yönde tip dönüşümünü gerçekleştirdik. Göreceğiniz üzere main fonksiyonunda ikinci bir tip dönüşümü daha uyguladık. Bu da aşağı yönde dönüşüme örnektir.
__________________

[Bu Adresi (link) Görme Yetkiniz Yok BEDAVA'ya Üye Ol Sitemizden Faydalan....]

[Bu Adresi (link) Görme Yetkiniz Yok BEDAVA'ya Üye Ol Sitemizden Faydalan....]


Bur2 isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Konu Sayısı: 497
Takımınız:
Alt 31/07/08, 15:30   #2
Neutralizer
Yasaklı kullanıcı
 
Neutralizer - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: Jan 2008
Bulunduğu yer: İstediğin yerden
Mesajlar: 1.883
Tecrübe Puanı: 0 Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute Neutralizer has a reputation beyond repute
Standart

paylaşım için tşkrlr
Neutralizer isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Konu Sayısı: 316
Takımınız:
Cevapla


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Yeni Mesaj yazma yetkiniz Aktif değil dir.
Mesajlara Cevap verme yetkiniz aktif değil dir.
Eklenti ekleme yetkiniz Aktif değil dir.
Kendi Mesajınızı değiştirme yetkiniz Aktif değildir dir.

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Gitmek istediğiniz klasörü seçiniz


Bütün Zaman Ayarları WEZ +3 olarak düzenlenmiştir. Şu Anki Saat: 09:46 .


Powered by vBulletin
Copyright © 2000-2007 Jelsoft Enterprises Limited.
Sitemap
6, 5, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 113, 16, 17, 18, 19, 81, 20, 27, 22, 23, 24, 25, 26, 48, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 43, 136, 40, 58, 45, 42, 44, 46, 47, 53, 54, 55, 56, 57, 59, 60, 70, 61, 62, 63, 64, 65, 66, 68, 69, 71, 72, 74, 75, 76, 77, 78, 79, 80, 82, 83, 96, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 98, 97, 100, 101, 102, 103, 106, 104, 105, 112, 109, 108, 107, 110, 111, 114, 115, 118, 116, 117, 119, 148, 154, 124, 165, 122, 120, 123, 121, 150, 153, 125, 128, 129, 131, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 151, 149, 202, 175, 164, 152, 167, 155, 156, 157, 158, 159, 160, 161, 162, 163, 195, 169, 166, 168, 170, 171, 172, 199, 174, 173, 196, 200, 176, 177, 180, 178, 179, 182, 189, 187, 184, 186, 191, 192, 193, 194, 197, 198, 201, 203, 229, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 236, 231, 232, 233, 234, 235, 237, 240, 239, 241, 243, 242, 244,