C++ Class Soru

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Altair
    Altair's avatar
    Kayıt Tarihi: 31/Aralık/2009
    Erkek

    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

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    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

    :)
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Altair
    Altair's avatar
    Kayıt Tarihi: 31/Aralık/2009
    Erkek

    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.

    http://stackoverflow.com/questions/8932316/generate-automatic-serial-number-of-each-object-in-this-program-the-constructo

    burada soruyu cevaplayan arkadaş benim gibi düşünmüş ama sonuç yanlış hata veriyor derleyeci.

    birde http://stackoverflow.com/questions/20310000/error-iso-c-forbids-in-class-initialization-of-non-const-static-member

    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 ?

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JPriest
    JPriest's avatar
    Kayıt Tarihi: 09/Mart/2007
    Erkek

    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

     


    Sen hiç kaval çaldın mı?
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Altair
    Altair's avatar
    Kayıt Tarihi: 31/Aralık/2009
    Erkek
    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
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    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

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Altair
    Altair's avatar
    Kayıt Tarihi: 31/Aralık/2009
    Erkek
    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 : )

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek
    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

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Altair
    Altair's avatar
    Kayıt Tarihi: 31/Aralık/2009
    Erkek
    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..

Toplam Hit: 2526 Toplam Mesaj: 9