Qt (C++)'de clSınıf isimli bir sınıf oluşturuyorum. Bu sınıftan bir nesne oluştururken

clSınıf nesne=new clSınıf();

ile

clSınıf nesne;

arasındaki fark tam olarak nedir. Benim yazdığım kodda ikiside iş görüyor ve kullanımda hiç bir farkları yok. Ayrıca uygulamanın bu nesneleri çağırdığı fonksiyonun sürekli çağrıldığını farzedelim. Mesela tamam butonu var ve kullanıcı tamama her tıkladığında tamam() fonksiyonu çağrılıyor olsun. tamam() fonksiyonunun içinde de bu nesneler ile işlemler yapılıyor. Böyle bir durumda nesne tamam() fonksiyonunun içinde mi oluşturulmalı yoksa global olarak mı kullanılmalı?

soruldu: 04 Kas '13, 02:36

ekremk's gravatar image

ekremk
421243436
cevap kabul oranı: 7%

değiştirildi: 07 Kas '13, 02:24

CemIkta's gravatar image

CemIkta ♦
19.9k29125190


Birisinde new Operator'u ile instance oluşturuyorsunuz yani statis clSınıf'ını canlı hale getiriyorsunuz. Diğerinde is sadece clSınıf nesnesini nesne diye bir değişkene tanımlıyorsunuz ve bu muhtemel öncesinde bir atama olmadıysa null olarak gelecektir.

Muhtemel clSınıf'ı daha önce atama yapıyorsunuzdur ki sınıfı kullanıyorsunuz.

Eğer nesneler yada tamam butonunun metodu iş kuralları içerisinde ortak bir nokta ise ve farklı yerlerdede kullanılıyorsa, ortak sınıfların bulunduğu metodlar içerisidne olmalıdır. Fakat tamam butonunun tetiklediği metod sadece bu noktada kullanılıyorsa, private tanımlamalar daha makuldur.

OOP prensiplerinden Encapsulation(kapsülleme) konusu altındaki accesss modifiers kavramlarına göz atmanızı öneririm.

permanent link

cevaplandı: 04 Kas '13, 05:04

Turgay%20Can's gravatar image

Turgay Can
8.3k63798
cevap kabul oranı: 18%

değiştirildi: 04 Kas '13, 05:59

ilk önce uyaralım, sınıf isimleri büyük harfle başlar, best practice budur.

clSınıf nesne yerine ClSinif gibi.

Sorunun cevabına gelince ClSınıf nesne; demek arabanın kalıbı demektir. new clSınıf dediğinde ise bu kalıba uygun araban yaratılır.

permanent link

cevaplandı: 04 Kas '13, 08:40

MCY's gravatar image

MCY
1.1k2622
cevap kabul oranı: 16%

ClSinif nesneIsaretcisi;

Bu satırda sadece ClSinif tipinden, herhangi bir nesneyi işaret etmeyen(referansını barındırmayan) bir değişkeni belleğe çıkarmış olursunuz.

new anahtar kelimesi ile nesne örneklenmediğinden, bellekte nesne örneği için yer açılmamış(parsellenmemiş) olacaktır.

Bu seneryoda, nesneIsaretcisi değişkeni üzerinden bir üyeye erişmek istediğinizde NullReferenceException hatası alırsınız.

ClSinif nesneIsaretcisi = new ClSinif();

Bu satırda ise, tanımlandığı anda, "ClSinif tipinden" ve "varsayılan değerleri ile belleğe çıkmış bir nesneyi işaret eden" değişkeni belleğe çıkarmış olursunuz.

Nesne işaretçisi ve nesne örneği bellektedir. Bellekte yer kaplar ve üyelerine erişilmeye hazır durumdadır. Bu nesne örneği ile işiniz bittiğinde(C++ için) bellekten temizlemeyi unutmayınız.

permanent link

cevaplandı: 06 Kas '13, 08:37

turgayozgur's gravatar image

turgayozgur
126138
cevap kabul oranı: 25%

değiştirildi: 06 Kas '13, 08:41

C++ da new operatörü ile bir nesne yaratıldığında, bu nesne delete operatörü ile silinene kadar kalıcıdır ( yani new operatörü ile yaratılan nesne heap alanında yer alır ve manuel olarak silinmelidir). Tam tersine, new operatörü kullanmadan oluşturulan nesne, kapsam dışına çıkıldığında otomatik olarak sonlandırılır ( yani new operatörü kullanmadığında nesne stack alanında yaratılır).

permanent link

cevaplandı: 05 Kas '13, 11:56

O%C4%9Fuz%20%C3%87elikdemir's gravatar image

Oğuz Çelikdemir
2.0k52234
cevap kabul oranı: 13%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×45
×12

Soruldu: 04 Kas '13, 02:36

Görüntüleme: 1,053 kez

Son güncelleme: 07 Kas '13, 02:24

powered by BitNami OSQA