Şimdi Ara

Object create etmenin 2 farklı yolu mu var

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
11
Cevap
0
Favori
257
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar, C++'da bir class'dan iki farkla yolla instance create edebiliyoruz. Bu ikisi arasındaki fark nedir peki?

    Mesela;
    Class object1 = new Class(); // object1 create edildi,

    Class object2; // object2 create edildi


    object1 ve object2'nin create edilmesi arasındaki fark nedir?



  • quote:

    Orijinalden alıntı: loves_oi

    Merhaba arkadaşlar, C++'da bir class'dan iki farkla yolla instance create edebiliyoruz. Bu ikisi arasındaki fark nedir peki?

    Mesela;
    Class object1 = new Class(); // object1 create edildi,

    Class object2; // object2 create edildi


    object1 ve object2'nin create edilmesi arasındaki fark nedir?


    şimdi senin o classtan türettiğin şeylere örnek(instance) deniyor.
    İki tane instancen var birisi object1 diğeri object2.
    Java üzerinden konusacağım.
    object2 ile bir işlem yapmaya calıstıgında kod üzerinde NullPointerException yersin.
    Sen böyle bir instance olsun dedin tamam ama new ile türetmediğin için belleğe yazmadın bellekte create olmadı bu.
    Yani iki tür yok aslında object1 tanımlaması doğru.
    o object2 e programın her hangi bir yerinde ihtiyaç duydugunda object2 = new Class(); yapacaksın yoksa kullanamazsın.




  • Selamlar loves_oi,

    Her ikisi de farklı şeyler yapiyor.

    quote:

    Class object2;

    - Burada otomatik depolama süresi ile bir nesne oluşturulur. Oluturulup, kullaniliyor ve bloktan cikinca {...}, sona erer. (Genellikle kapsamı sona erdiğinde imha edilecek)

    quote:

    Class object1 = new Class();

    - Ikincisi ise, dinamik depolama süresi ile bir nesne oluşturur

    Nesnenin omru boyunca ince bit kontrolun olucak, cunku otomatiken kapsam disina gitmez. Silmek icin ayri isler yapmalisin.

    Simdi ogrenmek fazasindamisin? Yoksa kullandigin bir ornek var mi?



    < Bu mesaj bu kişi tarafından değiştirildi dbd -- 2 Mart 2015; 18:35:07 >
  • @ahmtbrk58 yanlışın var. Dediğin şey Java için geçerli. Ancak C++ için geçerli değil. Çünkü şu an önümde kitap var Deitel C++ OOP, neredeyse hiç bir örnekte new keyword ile object create etme yapılmamış, Adam class'ı yazıyor, sonra object'i böyle tanımlıyor : Employee e; tüm örneklerde böyle.



    < Bu mesaj bu kişi tarafından değiştirildi loves_oi -- 2 Mart 2015; 18:27:21 >
  • Kitapta olan bir ornek gosterirmisin? Mesela :

    // classes example 
    #include <iostream>
    using namespace std;

    class Rectangle {
    int width, height;
    public:
    void set_values (int,int);
    int area() {return width*height;}
    };

    void Rectangle::set_values (int x, int y) {
    width = x;
    height = y;
    }

    int main () {
    Rectangle rect;
    rect.set_values (3,4);
    cout << "area: " << rect.area();
    return 0;
    }
  • dbd kullanıcısına yanıt
    Evet sizin verdiğiniz örnek gibi yapılıyor işte kitapta.
    Rectangle rect; yaparak object create etmiş mesela sizin verdiğiniz örnekte.

    Rectange rect = new Rectangle(); şeklinde create edilmiyor object yani. neden böyle



    < Bu mesaj bu kişi tarafından değiştirildi loves_oi -- 2 Mart 2015; 18:33:41 >
  • Tamam kanka, burdaki orneklere iyice bak. Ikisindeki fark budur:

    - Birinci ornekte bizim class_obj otomatik olarak "stack"-de yazilicak. Ve bu uygun bir kullanma metodu degildir!

    #include<iostream> 

    class example{
    int var1, var2;
    public:
    void set_request(int a, int b);
    int sum(){return (var1+var2);}
    }

    void example::set_request(int a, int b)
    {
    var1 = a;
    var2 = b;
    }

    int main(void)
    {
    example class_obj;
    class_obj.set_request(1,4);
    std::cout<<"\n The sum is "<<class_obj.sum()<<"\n";

    return 0;
    }



    - Burdaki ornekte ise, bizim class_obj; , dinamik olarak RAM-da yazilacak ve onun ustunde daha cok kontorl olucak. Burda "pointer" (işaretçi) ile calisiyoruz.

    #include <iostream> 
    using namespace std;

    class example{
    int var1, var2;
    public:
    void set_request(int a, int b);
    int sum(){return (var1+var2);}
    };

    void example::set_request(int a, int b)
    {
    var1 = a;
    var2 = b;
    }

    int main(void)
    {
    example* class_obj = new example();
    class_obj->set_request(1,4);
    std::cout<<"\n The sum is "<<class_obj->sum()<<"\n";

    return 0;
    }



    Aralarindaki farka iyice bak. Sorularin varsa, sor



    < Bu mesaj bu kişi tarafından değiştirildi dbd -- 2 Mart 2015; 19:10:39 >




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • quote:

    Orijinalden alıntı: dbd

    Tamam kanka, burdaki orneklere iyice bak. Ikisindeki fark budur:

    - Birinci ornekte bizim class_obj otomatik olarak "stack"-de yazilicak. Ve bu uygun bir kullanma metodu degildir!

    #include<iostream> 

    class example{
    int var1, var2;
    public:
    void set_request(int a, int b);
    int sum(){return (var1+var2);}
    }

    void example::set_request(int a, int b)
    {
    var1 = a;
    var2 = b;
    }

    int main(void)
    {
    example class_obj;
    class_obj.set_request(1,4);
    std::cout<<"\n The sum is "<<class_obj.sum()<<"\n";

    return 0;
    }



    - Burdaki ornekte ise, bizim class_obj; , dinamik olarak RAM-da yazilacak ve onun ustunde daha cok kontorl olucak. Burda "pointer" (işaretçi) ile calisiyoruz.

    #include <iostream> 
    using namespace std;

    class example{
    int var1, var2;
    public:
    void set_request(int a, int b);
    int sum(){return (var1+var2);}
    };

    void example::set_request(int a, int b)
    {
    var1 = a;
    var2 = b;
    }

    int main(void)
    {
    example* class_obj = new example();
    class_obj->set_request(1,4);
    std::cout<<"\n The sum is "<<class_obj->sum()<<"\n";

    return 0;
    }



    Aralarindaki farka iyice bak. Sorularin varsa, sor

    dinamik olarak ram'e yazılacak demişsin ya, diğer bir deyişle heap'e yazılacak diyebiliriz öyle değil mi?


    example* class_obj = new example(); çok mantıklı, ben bunu



    example class_obj = new example(); diye düşünmüştüm, ama bu satır yanlış oluyor c++'a göre öyle değil mi? Bu satır ancak Java'da doğru olur öyle değil mi?




  • Birinde referans create ediyorsun, digerinde obje.
  • quote:

    Orijinalden alıntı: loves_oi

    @ahmtbrk58 yanlışın var. Dediğin şey Java için geçerli. Ancak C++ için geçerli değil. Çünkü şu an önümde kitap var Deitel C++ OOP, neredeyse hiç bir örnekte new keyword ile object create etme yapılmamış, Adam class'ı yazıyor, sonra object'i böyle tanımlıyor : Employee e; tüm örneklerde böyle.

    Selamlar evet c++ yazmadım malesef zaten orada java için böyle olduğunu belirtmiştim.
    Bilgilendirmen için teşekkürler
  • quote:

    dinamik olarak ram'e yazılacak demişsin ya, diğer bir deyişle heap'e yazılacak diyebiliriz öyle değil mi?


    example* class_obj = new example(); çok mantıklı, ben bunu



    example class_obj = new example(); diye düşünmüştüm, ama bu satır yanlış oluyor c++'a göre öyle değil mi? Bu satır ancak Java'da doğru olur öyle değil mi?


    Evet. Tam boyledir @loves_oi



    < Bu mesaj bu kişi tarafından değiştirildi dbd -- 3 Mart 2015; 9:58:32 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.