C++ Class Soru
-
Merhabalar daha önce c++ çalıştığımı söylemiştim. Class konusunda takıldığım bir soru var nedenini anlayamadım bir türlü çözümünüde bulamadım.
Öncelikle soruda anladığım kadarıyla yazdığım sınıfta her obje için bir numara atanmasını istiyor ve bu numaralar her objede farklı olacak enson 3 obje oluşturacağım ve çağıracağım ekrana benim numaram x diye yazacak. Buraya kadar sıkıntı yok ancak nedense yapamadım. Hatam nerede yada nasıl düzeltmeliyim ve neden öyle olmalı açıklarsanız sevinirim.
#include<iostream>
using namespace std;
class SerialNumber {
private :
int serial;
static int sayac;
public :
SerialNumber() {
serial=sayac++;
}
void respond() {
cout<<"I am object number "<< serial << endl;
}
};
int main(){
SerialNumber obj1,obj2,obj3;
obj1.respond();
obj2.respond();
obj3.respond();
system("pause");
return 0;
}Buda verdiği hata : http://puu.sh/e2IDF/f56d7eebcf.png
-
Edit:
#include<iostream> #include<cstdlib> using namespace std; static int sayac = 0; class SerialNumber { private : int serial; public : SerialNumber() { serial=sayac++; } void respond() { cout<<"I am object number "<< serial << endl; } }; int main(){ SerialNumber obj1,obj2,obj3; obj1.respond(); obj2.respond(); obj3.respond(); system("pause"); return 0; }Sayac değişkenine ilk değer atamamışsın. Ve sınıf içerisinde tanımladığından her nesnenin sayac değişkeni kendisine ait oluyor, ilk değer atasanda hepsi eşit olur.
wasd tarafından 04/Oca/15 06:26 tarihinde düzenlenmiştir -
Hocam çok teşekkür ederim, senin çözümünü anladım sayac değişkenini global bir static yapıyorsun ama mantık olarak sııf yapısını kullandığımız için sayac değişkeni private olması gerekiyor diye düşünüyorum soruyu internette aradım birkaç birşey buldum.
burada soruyu cevaplayan arkadaş benim gibi düşünmüş ama sonuç yanlış hata veriyor derleyeci.
buradada benzer bir cevap var ancak
And add the following line to your employee.cpp:
int Employee::counter = 0;
Böyle birşey kullanmış arkadaş bunu neden kullandığını anlayamadım yada böyle bir kullanım ne işe yarıyor bilmiyorum buradan yola çıkarak kodu düzenleyip class parantezlerinin sonuna
int SerialNumber :: sayac = 0 ;
eklediğim zaman çalışıyor ancak bu satır ne işe yaradı yani bunu public kısımda yazmak istesem nasıl yazabilirim ?
-
C++'da extern keyword'üne bir göz at bence. Şurda kısa birkaç bilgi var:
http://stackoverflow.com/questions/10422034/when-to-use-extern-in-c
-
JPriest bunu yazdı
C++'da extern keyword'üne bir göz at bence. Şurda kısa birkaç bilgi var:
http://stackoverflow.com/questions/10422034/when-to-use-extern-in-c
Hocam anladığım kadarıyla class yapılarında private static değişkenlere ilk değeri vermek istiyor isek int SerialNumber :: sayac = 0 ; bu tarz bir initialize yapmamız gerekyor doğru mudur ?
http://stackoverflow.com/questions/3536372/defining-static-members-in-c
Altair tarafından 04/Oca/15 14:41 tarihinde düzenlenmiştir -
Sorunu okuyamadım vallaha. Sanırım
serial değişkenini sayac değişkenindeki değeri atayıp sayac değişkenini arttırmaya çalışıyorsun.oluşturulan nesnenin elenlarına this keyword ü ile ulaşabilirsin
this->serial = sayac++; demen yeterli. Tabi okurkende cout << this->serial; demen lazım. Tabi sorun buysa. Akşam unutmazsam sorunu okuyup öyle cevap veriirm.
Sayacıda static int tanımla global değişken olarak
static int sayac = 0;
gibi..
DrKill tarafından 04/Oca/15 17:01 tarihinde düzenlenmiştir -
DrKill bunu yazdı
Sorunu okuyamadım vallaha. Sanırım
serial değişkenini sayac değişkenindeki değeri atayıp sayac değişkenini arttırmaya çalışıyorsun.oluşturulan nesnenin elenlarına this keyword ü ile ulaşabilirsin
this->serial = sayac++; demen yeterli. Tabi okurkende cout << this->serial; demen lazım. Tabi sorun buysa. Akşam unutmazsam sorunu okuyup öyle cevap veriirm.
Sayacıda static int tanımla global değişken olarak
static int sayac = 0;
gibi..
Hocam şöyle amacım soruda olanları kullanmak yani this keyword ünü falan bilmiyorum ki :( en basit yolu dediğiniz gibi sayac ı global yapmak ama son dediğim kısım doğru mu acaba onu araştırıyorum bende : )
-
Altair bunu yazdıDrKill bunu yazdı
Sorunu okuyamadım vallaha. Sanırım
serial değişkenini sayac değişkenindeki değeri atayıp sayac değişkenini arttırmaya çalışıyorsun.oluşturulan nesnenin elenlarına this keyword ü ile ulaşabilirsin
this->serial = sayac++; demen yeterli. Tabi okurkende cout << this->serial; demen lazım. Tabi sorun buysa. Akşam unutmazsam sorunu okuyup öyle cevap veriirm.
Sayacıda static int tanımla global değişken olarak
static int sayac = 0;
gibi..
Hocam şöyle amacım soruda olanları kullanmak yani this keyword ünü falan bilmiyorum ki :( en basit yolu dediğiniz gibi sayac ı global yapmak ama son dediğim kısım doğru mu acaba onu araştırıyorum bende : )
Sorunu okudum. Benim dediğim gibi yapacaksın. This keyword'unu bilmemen sıkıntı değil, öğrenmemen sıkıntı :) Nesneye yönelik programlama öğrenmeye çalışıyorsunuz. this'i öğrenmeden olmaz.
This keyword'u sınıftan oluşturulan nesnenin bellekteki adresini tutan bir pointerdır.
Hani this->serial yazdım ya
*(this).serial ile arasında bir fark yok.
(*this).serial = ++sayac; demen yeterli. Yazdırırkende (*this).serial ya da this->serial diye yazdıracaksın ekrana.
DrKill tarafından 04/Oca/15 18:51 tarihinde düzenlenmiştir -
DrKill bunu yazdıAltair bunu yazdıDrKill bunu yazdı
Sorunu okuyamadım vallaha. Sanırım
serial değişkenini sayac değişkenindeki değeri atayıp sayac değişkenini arttırmaya çalışıyorsun.oluşturulan nesnenin elenlarına this keyword ü ile ulaşabilirsin
this->serial = sayac++; demen yeterli. Tabi okurkende cout << this->serial; demen lazım. Tabi sorun buysa. Akşam unutmazsam sorunu okuyup öyle cevap veriirm.
Sayacıda static int tanımla global değişken olarak
static int sayac = 0;
gibi..
Hocam şöyle amacım soruda olanları kullanmak yani this keyword ünü falan bilmiyorum ki :( en basit yolu dediğiniz gibi sayac ı global yapmak ama son dediğim kısım doğru mu acaba onu araştırıyorum bende : )
Sorunu okudum. Benim dediğim gibi yapacaksın. This keyword'unu bilmemen sıkıntı değil, öğrenmemen sıkıntı :) Nesneye yönelik programlama öğrenmeye çalışıyorsunuz. this'i öğrenmeden olmaz.
This keyword'u sınıftan oluşturulan nesnenin bellekteki adresini tutan bir pointerdır.
Hani this->serial yazdım ya
*(this).serial ile arasında bir fark yok.
(*this).serial = ++sayac; demen yeterli. Yazdırırkende (*this).serial ya da this->serial diye yazdıracaksın ekrana.
: ) Anlamadım hocam neyse hafta içi işlerim olmasa uğraşacağımda hafta sonuna kaldı artık..
