Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: muhittin_kaplan - 26 Nisan 2014, 14:57:32

Başlık: C++
Gönderen: muhittin_kaplan - 26 Nisan 2014, 14:57:32
Birçok Dil ile çalışabiliyom (bilmiyor işimi hallediyorum  :-[ )
C++ ile ilgili çalışmaya başlama zamanı geldi. İnceledim Namespace ler eventler, metodlar filan bana uzak konular değil, Artık OOP olmak gerek MCU üzerinde diye düşünüyorum. Yardımlarınızı Esirgemeyiniz..


mesaj birleştirme:: 26 Nisan 2014, 15:26:08

C++ Dersleri - 1 efe tur otobüs bileti [url=http://www.otobusbileti.gen.tr]www.otobusbileti.gen.tr (http://www.youtube.com/watch?v=zbD6RqyRZ6s#)[/url]
Başlık: Ynt: C++
Gönderen: M_B - 26 Nisan 2014, 15:30:03
@muhittin_kaplan Hocam;
Öncelikle alıştırma turu icin sınıflarla calışmak lazım.  Sınıflarla çalışmak eğlenceli diyebilirim. Tam konuya hakim değilim.
Sadece meraktan arduino da denedim. Sonra  forumda Klein kodunu inceledim.
Aslında Klein hocam Basit led, Buton kontrol gibi fonksiyonlarla devam eden bir kaç örnek verse iyi olurdu. Orda direk PWM ye dalmış. Aslında kolayda biraz incelemek lazım.
Sınıflar la ilgili dokuman slayt:
http://yadi.sk/d/y1qEkPHNNJdLF (http://yadi.sk/d/y1qEkPHNNJdLF)

Arduino uygulaması ( C++)

#include <LED13.h>

LED13 led;     //initialize an instance of the class

void setup()
{
     /*nothing to setup*/
}

void loop(){
  led.blink(2000);    //stay one second on, then a second off
}


LED13.h

#ifndef LED13_H
#define LED13_H

#include "WProgram.h"

class LED13 {
public:
LED13();
~LED13();
    void on();
void off();
void blink(int time);
};

#endif


LED13.cpp Dosyası

#include "LED13.h" //include the declaration for this class

const byte LED_PIN = 13; //use the LED @ Arduino pin 13

//<<constructor>> setup the LED, make pin 13 an OUTPUT
LED13::LED13(){
    pinMode(LED_PIN, OUTPUT); //make that pin an OUTPUT
}

//<<destructor>>
LED13::~LED13(){/*nothing to destruct*/}

//turn the LED on
void LED13::on(){
digitalWrite(LED_PIN,HIGH); //set the pin HIGH and thus turn LED on
}

//turn the LED off
void LED13::off(){
digitalWrite(LED_PIN,LOW); //set the pin LOW and thus turn LED off
}

//blink the LED in a period equal to paramterer -time.
void LED13::blink(int time)
{
on(); //turn LED on
delay(time/2);  //wait half of the wanted period
off(); //turn LED off
delay(time/2);  //wait the last half of the wanted period
}
Başlık: Ynt: C++
Gönderen: Klein - 26 Nisan 2014, 15:35:19
Bir süredir gömülü sistemler için C++/OOP ile uğraşıyorum. Bir miktar ilerleme sağladığımı zannediyorum.  Soruların olursa cevap vermeye çalışırım.
Başlık: Ynt: C++
Gönderen: Gökhan BEKEN - 26 Nisan 2014, 15:38:10
C++, C programcılarının Nesneye dayalı programcılığa verdiği yanıttır.
Bazı farklar: http://gokhanbeken.com/c-ve-c-dillerinin-farklari (http://gokhanbeken.com/c-ve-c-dillerinin-farklari)
Bunların dışında, string değişken kullanımı, fonksiyonlara aşırı yüklenme gibi bir ton yenilikleri de var.
Başlık: Ynt: C++
Gönderen: kimlenbu - 26 Nisan 2014, 15:39:27
Ben bugüne kadar ekipte çalışmadım hiç, hep tek mühendis oldum, şimdi de öyle, o yüzden mcu'da oop yöntemi benim için kolaylıktan çok gereksiz kod yazımı ve zaman kaybı demek.

Onun yerine yordamsal programlama daha çok işime geliyor.

Amaç ekip halinde çalışmayı kolaylaştırmak mı ?




Başlık: Ynt: C++
Gönderen: Klein - 26 Nisan 2014, 15:47:10
C'de Struct'lar ile deneyim kazanmanın, sınıfları anlamayı ve yönetmeyi kolaylaştıracağını düşünüyorum.
Programınızdaki değişkenleri  Struct kullanarak mantıksal bölümlere ayırmak , tanımladığınız Struct'ları başka Struct'lar içerisinde kullanmak , Struct'ların içerisinde fonksiyon işaretçileri kullanarak yapıya işlevselik kazandırmak gibi konularda deneyim kazadığınızda , Sınıfları ve dolayısıyla OOP programlamayı daha çabuk kavrayacağınızı düşünüyorum.
Direk sınıflara dalıp devam da edilebilir. Ama zaten C kullanıyorsanız ve bir anda C++/OOP programlaya geçme çansınız yoksa , devam eden projelerinizi Struct'lar ile gülendirerek OOP için zemin hazırlamış olursunuz.
Başlık: Ynt: Ynt: C++
Gönderen: Gökhan BEKEN - 26 Nisan 2014, 15:56:51
Alıntı yapılan: kimlenbu - 26 Nisan 2014, 15:39:27
Amaç ekip halinde çalışmayı kolaylaştırmak mı ?
Yoooo,


Amaç felan yok hocam, millet abartıyor C ile gayet okunaklı kodlar yazılamıyor mu sanki?
örneğin:
birisi LCD kütüphanesi yazmış, "lcd.h" ve "lcd.c" dosyalarını indiriyoruz, "lcd.h" dosyasını kullanacağımız yere include ile bildiriyoruz işlem tamam.
Al sana grup çalışması.

OOP'nin "hah tam budur" diyeceğimiz bir olayı yok, kullandıkça alışıyorsun, bir konfor getiriyor, bazı şeyler daha rahat oluyor ama "eskiden falanca şeyi yapamayıp da şimdi OOP sayesinde yapabiliyorum" diye birşey yok.
C ile kod yazanlar, elektronikten geçme ise spagetti(neyin nerden geldiği belli olmayan, karman çorman kod yapısı) kod yazma eğiliminde oluyorlar, yapı düzen felan hak getire.
OOP ile spagetti kod yazmak daha zor oluyor, ama yazan adam OOP mantığında bile spagetti yazabilir.
Başlık: Ynt: C++
Gönderen: Klein - 26 Nisan 2014, 16:23:45
Bu konu yine  C ile yapamayıp C++ ile yapabileceğimiz ne var , gerekli mi gereksiz mi? tartışmasına kayacak gibi görünüyor. 
Olaya bu şekilde bakarsak,  ASM ile yapamayıp C ile yapabildiğimiz ne var diye sormamız gerekir.  Ya da aynı şekilde Makina kodlarıyla ( HEX kodlar)  yapamayıp ASM ile yapabildiğim şey nedir, öyleyse HEX kodlarla yazalım diye düşünmemiz gerekir.

Bu artışmaya hiç girmadan, OOP için şunu söyleyebilirim. Program yazmayı daha zevkli ve daha organize hale getiriyor. Bu benim için yeterli bir sebep. 
Tabi tüm mesele  konfor meselesi değil.  C++/OOP ile ilgili başlıklar çoğalıp  örnekler ortaya çıkmaya başladığında OOP programlamanın gücü zaten görülecek.
Bu sebeple şimdilik  sadece konfor diyelim.
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 26 Nisan 2014, 16:29:46
Evet Aman S.dik yarışmasına dönmesin. Hepsini Seviyoruz, Kapsayıcıyız, Hemsi Bizim Bu Dillerin.
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 26 Nisan 2014, 18:00:07
Nesne Nedir ?
Sınıf Nedir ?

mümkünse örnekleyerek yazabilirmisiniz ?
Başlık: Ynt: C++
Gönderen: mir_as82 - 26 Nisan 2014, 18:23:21
Hocam ben üstadlarımız kadar bilgi sahibi değilim ama yardımcı olmayı sevdiğimden birkaç cümle yazı yazayım dedim:

Sınıf olayı sadece kod bloklarıdır yani kodlarımızdır, Biz bu soyut olan şeyleri kurunca bunlar somutlaşır yani nesne olurlar.
Örneğin evin planı vardır bir de ev in kendisi vardır. İşte sınıf dediğimiz şeyler planlardır, sen onları somutlaştırırsan nesne olurlar.

Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 26 Nisan 2014, 19:35:13
Hocam bencede gerek yoktu ama olsun yinede yapmışlar bakın, kullanmayalım mı değil mi,

stm32f4 ile blinky yi nesne yönelimli olarak yapmaya çalışmak kötümü olur. LED yak diye projemiz olsa kötü mü olur ?

hadi bakalım eller taşın altına, Assembly yi çok seven abilerimiz birçok kişiye c ile çalışmak için ön ayak oldular. birileride -keşke- c biliyorsanız neden c++ ile çalışmıyorsunuz desin ve örneklerle, derslerle, ödevlerle  öncülük etsin. hadi..
Başlık: Ynt: Ynt: C++
Gönderen: Gökhan BEKEN - 26 Nisan 2014, 20:04:01
Alıntı yapılan: muhittin_kaplan - 26 Nisan 2014, 19:35:13
stm32f4 ile blinky yi nesne yönelimli olarak yapmaya çalışmak kötümü olur. LED yak diye projemiz olsa kötü mü olur ?
Discovery kit için yapmıştım basit bir led programı(C++ ve class ile)
http://gokhanbeken.com/keil-ile-c-class-ornegi-stm32 (http://gokhanbeken.com/keil-ile-c-class-ornegi-stm32)
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 26 Nisan 2014, 20:52:18
meftun teşekkür ederim.

şimdi adım adım gidelim.

#include "STM32F4xx.h"
#include "mgbClass.h" //benim classim olur kendileri

void SystemInit(){
    (*((int*)0xE000ED88))|=0x0F00000; 
// Floating Point donanimini aktiflestir. !!! Basimizin derdi !!!
    RCC->AHB1ENR |= 0x00000008;       
// GPIOD donaniminin clock sinyalini uygulayalim       
     
    GPIOD->MODER = 0x55000000;         
// GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (Ledler bu pinlerde)
    GPIOD->OSPEEDR= 0xFFFFFFFF;       
// GPIOD nin tum cikislari en yuksek hizda kullanacagiz
}

void DelayMs(unsigned int sayac);
//olu zaman fonksiyonu

int main(){   
        MgbClass cikis;        Mgbclas adında bir sınıf oluşturulmuş ve bu sınıftan cikis adında bir nesne yaratılmış.
     
    while(1){
                cikis.KirmiziLedYak();     DelayMs(1000);
                cikis.MaviLedYak();         DelayMs(1000);
                cikis.SariLedYak();         DelayMs(1000);
                cikis.TuruncuLedYak();     DelayMs(1000);
    } 
}
.......

include "STM32F4xx.h"
#include "GenericTypeDefs.h" //benim degiskenler için gerekli kütüphanem
//mgb: options for target kismindan path ayarlamazsan, include islemi yolu bulamaz, aklinda kalsin bu bilgi.



class MgbClass
//sinif adi, MgbClass'dir
{
public:         //neden public sebep nedir
        MgbClass();
//constructor   yani hazirlik(yapici fonksiyon)
        ~MgbClass();   
//destructor yani yikici fonksiyon
        void SariLedYak();
        void TuruncuLedYak();
        void MaviLedYak();
        void KirmiziLedYak();       

private: //buralar nedir
     
        uINT8 sari,turuncu,mavi,kirmizi;   
};

-------------
void MgbClass::MaviLedYak(){ //fonksiyonlar bu şekilmi tanımlanıyor  neden daha farklı tanımlanamazmıydı mesela parametreli
    GPIOD->ODR=mavi;
}
Başlık: Ynt: C++
Gönderen: M_B - 26 Nisan 2014, 21:42:37
@muhittin_kaplan Hocam;
ikinci mesajda vermiş olduğum sınıflarla ilgili dokumanın bir inceleyin hocam.
Orda mantığını anlayacaksınız.
10 sayfadan sonrası biraz karısık ;)
Karışık derken adamı sıkabiliyor ;)

Başlık: Ynt: C++
Gönderen: Gökhan BEKEN - 26 Nisan 2014, 22:06:42
Alıntı yapılan: muhittin_kaplan - 26 Nisan 2014, 20:52:18
MgbClass cikis;        Mgbclas adında bir sınıf oluşturulmuş ve bu sınıftan cikis adında bir nesne yaratılmış.
Mevcut olan "MgbClass" adlı class'tan, "cikis" adlında bir nesne üretilmiş.


Alıntı yapılan: muhittin_kaplan - 26 Nisan 2014, 20:52:18
public:         //neden public sebep nedir
Bir değişkenin veya bir fonksiyonun başında "public" varsa, o fonksiyona veya değişkene, farklı bir class'tan ulaşılabilir.
"public" yerine "private" yazsaydık, o değişken ya da fonksiyona, sadece tanımlandığı class'ın içinden ulaşılabilecekti.
OOP dillerde, bunların dışında static, protected, extends şeklinde tanımlamalarda vardır, daha sonra değiniriz bunlara.



Alıntı yapılan: muhittin_kaplan - 26 Nisan 2014, 20:52:18
private: //buralar nedir
        uINT8 sari,turuncu,mavi,kirmizi;   
};
Bildiğiniz üzere uINT8 değişken türünü GenericTypeDefs.h dosyasında şu şekilde tanımlamıştık:
typedef unsigned char   uINT8;
o halde
uINT8 sari,turuncu,mavi,kirmizi;   
satırı ile unsigned char türünde 4 adet değişken oluşturuyoruz zaten sizin sorduğunuz kısım burası değil başındaki "private:" kısmı.
Yukarda bahsettiğim gibi private olarak tanımlanan değişken veya fonksiyonlara sadece o class'tan ulaşabiliyoruz.
Örneğin burdaki "sari" adlı değişkene "MgbClass" adlı class'ın içindeki  "MgbClass", "~MgbClass" "SariLedYak" ,"TuruncuLedYak","MaviLedYak","KirmiziLedYak" fonksiyonların herhangi birinden erişebilirim, zaten "MgbClass" adlı classtan erişmişim.
Ancak "main.cpp" dosyasından cikis.sari=5 şeklinde erişemem, çünkü "sari" adlı değişken public değil private olarak tanımlandı.


Sizin sorularınızın dışında başka bilinmesi gerekenler de var. Aklıma gelenleri açıklıyorum.

       
MgbClass(); //constructor   yani hazirlik(yapici fonksiyon)
~MgbClass();    //destructor yani yikici fonksiyon


Constructor fonksiyonlar, classtan bir obje(nesne) yaratıldığı(hâşâ) pardon üretilmek istendiği zaman, nesne oluşturulmadan hemen önce kendi kendine çalışan fonksiyondur. Bu fonksiyonun içinde değişkenlere değer vermişiz. C++ dilinde constructor, class adı ile tanımlanır.
Destructor fonksiyonlar ise class'tan bir nesne yokedildileceği zaman, yok edilmeden hemen önce kendi kendine çalışan bir fonksiyondur. Bu fonksiyonun adı, class adının başına tilde(~) koyularak elde edilir.

Fonksiyon tanımlamalarında dikkat edeceğimiz bir husus var.
void MgbClass::SariLedYak(){}
Burda göreceğiniz üzere class adını yazdıktan sonra iki adet noktalıvirgül yazıp fonksiyon adını yazıyoruz. "MgbClass" adlı class'a ait "SariLedYak" adlı fonksiyonumuzu oluşturduk.

Önemli bir konu daha var. Bir "C" programında direkt fonksiyon adını yazıp içi doldurulabilir. Ancak "C++" programlarında bir fonksiyon tanımlamadan önce, o fonksiyonun prototipini yazmamız gerekir.
"mgbClass.h" adlı header dosyamızda, class'ımızın prototip'ini yazdık. Bu dosyada sadece tanımlamalar vardır. Hiç kod yazmadığımız için kim nereye bağlı rahatça okunabilir.
"mgbClass.h" adlı dosyamızı "main.cpp" dosyamızda include etmemiz, classı kullanabilmemiz için yeterli/gerekidir.
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 26 Nisan 2014, 22:47:16
class araba{

    public string model;
    public int uretimyili;
    public string renk;




}



Başlık: Ynt: C++
Gönderen: mufitsozen - 27 Nisan 2014, 00:17:46
Alıntı yapılan: muhittin_kaplan - 26 Nisan 2014, 22:47:16
class araba{

    public string model;
    public int uretimyili;
    public string renk;
}


Rule 22
    Never specify public or protected member data in a class.

The use of public variables is discouraged for the following reasons:

    A public variable represents a violation of one of the basic principles of object-oriented programming, namely, encapsulation of data. For example, if there is a class of the type BankAccount, in which account_balance is a public variable, the value of this variable may be changed by any user of the class. However, if the variable has been declared private, its value may be changed only by the member functions of the class. [Not completely true. If a class has a member function which returns a reference to a data member, variables may be modified. This is avoided by following Rule 29.]
    An arbitrary function in a program can change public data which may lead to errors that are difficult to locate.
    If public data is avoided, its internal representation may be changed without users of the class having to modify their code. A principle of class design is to maintain the stability of the public interface of the class. The implementation of a class should not be a concern for its users.

The use of protected variables in a class are not recommended, since its variables become visible to its derived classes. The names of types or variables in a base class may then not be changed since the derived classes may depend on them. If a derived class, for some reason, must access data in its base class, one solution may be to make a special protected interface in the base class, containing functions which return private data. This solution would not imply any degradation of performance if the functions are defined inline.

The use of structs is also discouraged since these only contain public data. In interfaces with other languages (such as C), it may, however, be necessary to use structs.
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 27 Nisan 2014, 00:47:31
Hocam teşekkür ederim.
Başlık: Ynt: C++
Gönderen: mufitsozen - 27 Nisan 2014, 01:14:56
Alıntı yapılan: muhittin_kaplan - 27 Nisan 2014, 00:47:31
Hocam teşekkür ederim.

Hocam tesekkur etmeye gerek yok. Vaktim olmadigi icin uzun uzun yazamiyorum ama C++ cok guclu ama cok buyuk ve cok karisik bir dildir. Dogru kullanilmamasi zor bulunan hatalara ve kotu tasaranmis sistemlere sebep olur. Bu yuzden basindan beri C++ kullanmakta cok basarili olan sirketler C++ kullanilmasini bir takim kurallara baglamislardir.

En bilinenlerden biri Ericsson AXE telefon santrallarinin yapimcisi Elemtel sirketinin kurallaridir.

Benim size gonderdigim alinti bu kilavuzdandir.

Daha guncel olan ise Google C++ Style Guide'dir http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml (http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml)
Başlık: Ynt: C++
Gönderen: mir_as82 - 27 Nisan 2014, 10:03:38
Nesnenin oluşturulması ve yikilmasi demek, nesnenin oluşturulduğu hafiza alaninin serbest bırakılması manasına mi geliyor?
İkinci sorum da şu: nesnenin oluşturulması ve yikilmasi calişma zamanında olan işler dimi?(yani runtime da). Bu nesnelerin nerede(hangi memory adresinde) oluşturulacagina ne karar veriyor?yani hangi hafiza alanında olacagina.
Başlık: Ynt: C++
Gönderen: yamak - 27 Nisan 2014, 10:42:01
Alıntı yapılan: mir_as82 - 27 Nisan 2014, 10:03:38
Nesnenin oluşturulması ve yikilmasi demek, nesnenin oluşturulduğu hafiza alaninin serbest bırakılması manasına mi geliyor?
İkinci sorum da şu: nesnenin oluşturulması ve yikilmasi calişma zamanında olan işler dimi?(yani runtime da). Bu nesnelerin nerede(hangi memory adresinde) oluşturulacagina ne karar veriyor?yani hangi hafiza alanında olacagina.
1.Evet Hocam nesnenin yıkılması demek nesnenin işgal ettiği hafıza alanının serbest bırakılması demek.
2.Nesnenin oluşturulması çalışma anında da olabilir derleme anında da.Yıkılması ise çalışma anında olur.
Nesneyi oluşturmadan önce o nesne türünden bir pointer tanımlanması gerekir.Tanımlanan pointer'ın sakladığı bellek adresine nesne yerleştirilir.Örneğin

Araba_Sinifi* araba1;

int main(void)
{
   araba1=new Araba_sinifi();
}
Başlık: Ynt: Ynt: C++
Gönderen: Mr.Java - 27 Nisan 2014, 10:48:15
Merakımdan soruyorum.Java ile bu chip'lere kodlar yazabiliyormuyuz ? Neticede Java C++'dan daha iyi hakim bellek yapısına.
Başlık: Ynt: Ynt: C++
Gönderen: yamak - 27 Nisan 2014, 11:38:13
Alıntı yapılan: Mr.Java - 27 Nisan 2014, 10:48:15
Merakımdan soruyorum.Java ile bu chip'lere kodlar yazabiliyormuyuz ? Neticede Java C++'dan daha iyi hakim bellek yapısına.
Evet yazılabiliyor.Ama Java'nın bellek yapısına daha iyi hakim olduğunu neye göre söylüyorsunuz.
Başlık: Ynt: C++
Gönderen: Mr.Java - 27 Nisan 2014, 13:13:40
garbage collecter yapısından dolayı.
Başlık: Ynt: C++
Gönderen: yamak - 27 Nisan 2014, 13:23:23
Eğer c++ kullanan programcı dikkatli ve iyi bir programcı ise garbage collecter a ihtiyacı olmaz ve bellek sızıntısı olmayan ve java'dan daha performanslı programlar yazabilir.
Başlık: Ynt: C++
Gönderen: mufitsozen - 27 Nisan 2014, 13:45:05
javada garbage collecter olmasi bellek sizintisi olmayacagi anlamina gelmez. Dikkatsiz bir programci Javadada bellek sizintisi olan programlar yapmayi kolaylikla basarir.

Başlık: Ynt: Ynt: C++
Gönderen: Mr.Java - 27 Nisan 2014, 13:56:37
Kısmen doğru.Peki ya sizin  hiç başınıza "segmentation fault" hatası  geldi mi?

İyi bir program,iyi bir bellek yapısı kullanımından geçer.C++ kullanıcısının dinamik bellek yönetimine iyi hakim olması gerekiyor.Çünkü bellek yönetimi tamamı ile coder'in eline bırakılmıştır. İşaretçiler ile istediğimiz gibi istediğimiz her yere erişebiliriz. Zaten sorunlara yol açan olaylar da tam olarak burada başlıyor. İstediğimiz yerlere erişiyoruz ama bazen de erişmememiz gereken bir yere erişme imkanı da veriyor bize. Hiç bir kontrol de yapılmıyor derleyici tarafından. Yani 'arkadaşım sen buraya erişmeye çalışıyorsun ama bak burası başkası tarafından kullanılıyor, ya da senin sınırlarının dışında.' gibi bir hata ile bizi uyarmıyor. İşi tamamen bizim bilincimize bırakmış durumda. Çok bilinçli kullanılması gereken bir bellek yönetimine sahip olmak gerekiyor.

Sözlükte durum güzel anlatılıyor.  :)

java sen dur ben hallederim. aman kurcalama bozarsın der.
c++ al abi elimdekiler bu ortam senin der. yarattırır...

java kullanarak gelistirdiginiz on dört bin siniftan olusan yazilim, yeri geldiginde hintli bir ekip tarafindan bir kac hafta icinde reengineer edilip, biraktiginiz yerden gelistirilebilir.

buna karsilik c++ kullanarak gece yatmadan evvel yazdiginiz kodu sabah kalktiginizda taniyamayabilirsiniz.

baska bir dille, c++ artik coder'liga tövbe etmis programcinin dilidir, java ise programcilik yillarini geride birakmis gelistiricinin. cünkü bir tanesiyle programlar yazarsiniz, digeriyle devasa projeler gelistirirsiniz.

Amacım tabi ki java üstün demek değildir.Çünkü programcı dil ayırt etmez..Fakat anlattıklarım işin gerçeği malesef.

mesaj birleştirme:: 27 Nisan 2014, 14:05:52

Alıntı yapılan: mufitsozen - 27 Nisan 2014, 13:45:05
javada garbage collecter olmasi bellek sizintisi olmayacagi anlamina gelmez. Dikkatsiz bir programci Javadada bellek sizintisi olan programlar yapmayi kolaylikla basarir.
Yazılımda işaretci(pointer) kullanarak dinamik olarak bellek ayırdıktan sonra o bellek ile işiniz bittiğinde mutlaka ayrılan belleği bellek yöneticiye özel metodlar yardımıyla(delete, destructor vs.) iade etmeniz gerekir. Yoksa bellek sızıntısı(Memory Leak) oluşur ve bu bir süre sonra yazılımın farklı davranmasına yol açar.

C veya C++'da Memory Leak saptanması çok zordur.

Garbage Collector sayesinde Java'da bir nesne oluşturulduktan sonra o nesne ile işiniz bittiğinde hiçbir şey yapmanız gerekmez. Sanal makine akıllı bir biçimde kullanılmayan bellek bölümlerini belirli aralıklarla ya da adaptif metodlarla sistemi otomatik olarak temizler ve sisteme iade eder.Garbage Collector sistemlerinin yapısı oldukça karmaşıktır fakat algoritması mükemmeldir. Garbage Collector'ün varlığı Java'da bellek sızıntısı olmayacağı anlamına gelmez, ama bellek sızıntıları daha ender olarak ve farklı şekillerde karsınıza cıkar ve genellikle tedavi edilmesi daha kolaydır.
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 27 Nisan 2014, 14:18:18
ne yapalım şimdi, ben olsam c# a kickbox öğretir hepsini dövdürrüm.

konuya dönelim mümkünse, c++ bilmeyen birine bu dedikleriniz birşey ifade etmiyor.

Bu işe benimle devam etmek isteyenler Mümkünse Dev C++ ı kursunlar..


Başlık: Ynt: C++
Gönderen: yamak - 27 Nisan 2014, 14:31:57
Alıntı yapılan: muhittin_kaplan - 27 Nisan 2014, 14:18:18
ne yapalım şimdi, ben olsam c# a kickbox öğretir hepsini dövdürrüm.

konuya dönelim mümkünse, c++ bilmeyen birine bu dedikleriniz birşey ifade etmiyor.

Bu işe benimle devam etmek isteyenler Mümkünse Dev C++ ı kursunlar..

Hocam bence Qt kurun daha zevkli bi şekilde code geliştirirsiniz.
Başlık: Ynt: C++
Gönderen: speak48 - 27 Nisan 2014, 14:53:47
codeblock
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 27 Nisan 2014, 14:59:31
dev c++, qt, ve codeblock, vs express, hepsi kurulu. kolay kavramamı sağlayacak olan sanırım "vs exp".

mesaj birleştirme:: 27 Nisan 2014, 15:05:01

Şu halime bak


(http://s29.postimg.cc/ucbypk6df/masa_st.jpg) (http://postimg.cc/image/ucbypk6df/)
Başlık: Ynt: C++
Gönderen: Mr.Java - 27 Nisan 2014, 16:08:54
Ben netbeans ile uygulama geliştiriyordum.Kullanımı kolay,hafif güzel bir IDE.Tavsiye ederim.
Başlık: Ynt: Ynt: C++
Gönderen: Tagli - 27 Nisan 2014, 22:10:37
Alıntı yapılan: Mr.Java - 27 Nisan 2014, 13:56:37
baska bir dille, c++ artik coder'liga tövbe etmis programcinin dilidir, java ise programcilik yillarini geride birakmis gelistiricinin. cünkü bir tanesiyle programlar yazarsiniz, digeriyle devasa projeler gelistirirsiniz.
Bu olmadı işte. Linux devasa bir proje değil mi? Üstelik C++ ile değil C ile yazılmış. Ayrıca geliştiricileri aynı şirkette bile çalışmıyorlar. Buraya (http://royal.pingdom.com/2012/04/16/linux-kernel-development-numbers/) bir bak (yazının 2012 tarihli olduğuna da dikkat).
Başlık: Ynt: C++
Gönderen: Mr.Java - 27 Nisan 2014, 23:19:04
Sayın @tagli kıyaslama yaparken iki dili eşit konumda kıyaslamak lazım.Kernel programlamak için tabi ki c,c++ kullanırsınız.Siz java'yı zaten kernel programlamada kullanamazsınız.

Neyse biz konuyu saptırmayalım.Javayı gömülü sistemlerde kullanmam için ne yapmam lazım ? Hangi derleyici ve hangi chip'leri temin etmem lazım ?

mesaj birleştirme:: 27 Nisan 2014, 23:28:48

Bu arada sayın @gerbay mesajınız gözüme yeni ilişti.Üslubunuz hiç hoş değil.Biz burada iki dilin bellek yönetimini kıyaslıyoruz.Madem o kadar c++ dilinde bilginiz var bir de sizin yorumunuzu dinleyelim lütfen.

Bu arada mesajımda belirtmiştim zaten.Ekşi sözlüğün c++ java düşünceleri diye.Benim kendi yazım değildi.Yazdıklarımı tam okursanız bir daha yargısız infaz yapmazsınız diye düşünüyorum.
Başlık: Ynt: C++
Gönderen: Veli B. - 27 Nisan 2014, 23:33:21
Alıntı yapılan: mufitsozen - 27 Nisan 2014, 13:45:05
javada garbage collecter olmasi bellek sizintisi olmayacagi anlamina gelmez. Dikkatsiz bir programci Javadada bellek sizintisi olan programlar yapmayi kolaylikla basarir.

Bknz: Örnek biz :)
Çok kolay olmadı Abi ama...

mesaj birleştirme:: 27 Nisan 2014, 23:36:19

Alıntı yapılan: Mr.Java - 27 Nisan 2014, 23:19:04
Sayın @tagli kıyaslama yaparken iki dili eşit konumda kıyaslamak lazım.Kernel programlamak için tabi ki c,c++ kullanırsınız.Siz java'yı zaten kernel programlamada kullanamazsınız.

Neyse biz konuyu saptırmayalım.Javayı gömülü sistemlerde kullanmam için ne yapmam lazım ? Hangi derleyici ve hangi chip'leri temin etmem lazım ?

http://www.oracle.com/technetwork/java/embedded/resources/se-embeddocs/index.html?ssSourceSiteId=null (http://www.oracle.com/technetwork/java/embedded/resources/se-embeddocs/index.html?ssSourceSiteId=null)
Başlık: Ynt: C++
Gönderen: mufitsozen - 27 Nisan 2014, 23:46:20
Alıntı YapKısmen doğru.Peki ya sizin  hiç başınıza "segmentation fault" hatası  geldi mi?

Sayin Mr. java bu soruyu cevaplandirmak lazim, size cevap vermek icin degil, tarihe not dusmek icin. ;)

Sene 1977 ODTU EEde 3 sinif ogrencisiyim. O siralar Turkiyenin en buyuk bilgisayari ODTUde, IBM370/145. IBM bu kadar buyuk bilgisayarlari satmiyor, kiraliyor. Aylik kirasi 20 bin dolar (Rahmetli Babam 1in 4unden - en yuksek gostergeden devlet memuru olarak maas aliyor, yaklasik ayda 275 dolar!)

Bu devasa bilgisayarin 384Kilobyte gibi muazzam bir gercek hafizasi var. o siralarda beta surumu olan OS/VS2 isletim sistemini yuklersek her biri 2Megabyte olan 4 partition calistirabiliyoruz. Inanilmaz bir performans bu. :)

80 kolon punch kartlara yaziyoruz programlari. Video terminalleri filimlerde filan goruyoruz, daha Turkiyeye gelmemis!

Programlarimizi 360/370 Assembler (BAL), Fortran IV, Cobol ve PL/1 ile yaziyoruz.

O siralar MIT'den meshur Donovanin 'Systems Programming' kitabini okuyoruz. Recursion bahsinde verilen odevlerimizi vermeye basladik bilgisayara. Neredeyse herkes odevini PL/1 ile yaziyor. Fakat 2 gun icinde OS/VS2 "ABEND S0C4" ile o kadar sik crash etmeye basladiki, bizim sinifin verilen kulanici kimliklerini iptal etmislerdi. Rektorluk araya girince iki hafta sonra bize tekrar program verme izni cikmisti!.  ;D   

Mr. Java iste bu odev benim hatirliyabidigim ilk "segmentation fault" hatamdi. Ondan sonrada bir cok isletim sistemi ve programlama dilinde bu hatayi sayisiz sekilde aldim, sebebini buldum, ve yazdigim programlari duzelttim  ;D

Not:
Alıntı YapWhat is a S0C4 Abend?

S0C4 Abend is a protection exception when a virtual address cannot be mapped with a physical address.

When S0C4 Abend occurs

    An Invalid address referenced due to subscript error
    In a group Move the length of the receiving field was defined incorrectly
    Moving variable length record which is larger than the receiving field's length.
    Read/Write a file which has not been opened in the program.
    Read/Write a file after EOF.
    Invalid parms passed through linkage section.
    Used DD dummy with logic that moves high values to FD at end of read.
    Tried to use CALL within COBOL SORT Input output procedure
    Using GOBACK in COBOL SORT output procedure

How to Resolve S0C4?
; ; ; ;

    You can check for missing SELECT statements in COBOL program
    You can check if there are any un initialized indexes or subscripts in the program.
    You can check if the program is reading any file which is not opened.
    You can check if the program is missing SELECT ASSIGN clause
    You can check if the LRECL matches with the length of file specified in file descriptor in COBOL.

- See more at: http://mainframewizard.com/content/s0c4-abend#sthash.uaf4m9tV.dpuf (http://mainframewizard.com/content/s0c4-abend#sthash.uaf4m9tV.dpuf)
Başlık: Ynt: C++
Gönderen: Mr.Java - 28 Nisan 2014, 00:05:31
@mufit abi bağınız sağolsun.Sizin gibi üstadların bilgilerine,deneyimine ihtiyacımız var.

Ben alınmadım beni kaideye almadığınıza.Sadece bellek sızıntılarında hatanın kaynağını bulmanın programda zor bulunacağını düşünüyorum.

Bu arada.Konuyu açan arkadaşa Kaan aslan sistem programcılığı dernek başkanının ufak bir sohbeti iyi seyirler.. :)

Kaan Aslan C ve Sistem Programcıları Derneği (http://www.youtube.com/watch?v=7yf29-LDYfI#)

Başlık: Ynt: C++
Gönderen: mufitsozen - 28 Nisan 2014, 00:14:57
Alıntı yapılan: Mr.Java - 27 Nisan 2014, 23:19:04
Sayın @tagli kıyaslama yaparken iki dili eşit konumda kıyaslamak lazım.Kernel programlamak için tabi ki c,c++ kullanırsınız.Siz java'yı zaten kernel programlamada kullanamazsınız.
kim demis? eger java ile ilgili bilginiz sadece bu kadarsa ben ne diyeyim...

Alıntı yapılan: Mr.Java - 27 Nisan 2014, 23:19:04
Neyse biz konuyu saptırmayalım.Javayı gömülü sistemlerde kullanmam için ne yapmam lazım ? Hangi derleyici ve hangi chip'leri temin etmem lazım ?
Bunu SIZIN bize anlatmaniz lazim. Iddiali sozler soyluyor ama bunu destekleyecek bilgi ve tecrubeyi gosteremiyorsunuz.
Keske en azindan Javelin deseydiniz.

Azicik google kullanarak bir listede ben yazayim, buradan baslayarak arastiriniz.

    JamaicaVm (Commercial)
    MicroJVM (Comercial)
    Aonix Perc (Commercial)
    PreonVm (Commercial)
    AvianVM (Open source)
    Open Mika (Open source)
    Squawk (Open source)
    SimplRJT (Open source needs no RTOS for threading support - seems to have disappeared)
    Kaffe (Open source).

Alıntı yapılan: Mr.Java - 27 Nisan 2014, 23:19:04
Bu arada sayın @gerbay mesajınız gözüme yeni ilişti.Üslubunuz hiç hoş değil.Biz burada iki dilin bellek yönetimini kıyaslıyoruz.Madem o kadar c++ dilinde bilginiz var bir de sizin yorumunuzu dinleyelim lütfen.
sayin @gerbayda tam bu konudan bahsediyor! Bilmediginiz ve anlayamiyacaginiz derinlikte bir konuda tartismaya calisiyorsunuz. Kulaktan dolma bilgilere ve Internetden google"layip buldugunuz ve fakat icsellestiremediginiz konulari acik forumlarda tartismaniz cok yanlis.

Merak etmeyin bu forumda @gerbay ve onun gibi bircoklari  c++ ile yazdigi her programi java ilede mukemmelen yazabilir. Sizde umarim bir gun o seviyede tecrube ve bilgiye sahip olursunuz.

Alıntı yapılan: Mr.Java - 27 Nisan 2014, 23:19:04
Bu arada mesajımda belirtmiştim zaten.Ekşi sözlüğün c++ java düşünceleri diye.Benim kendi yazım değildi.Yazdıklarımı tam okursanız bir daha yargısız infaz yapmazsınız diye düşünüyorum.
kendi fikriniz olmayan alintilar gereksiz bilgi kirliligi yaratir ve ciddiye alinmamaniz sonucunu dogurur.
Benim size nacizane tavsiyem "yargisiz infaz" gibi cok moda olan klise laflari kullanarak demagoji yapmayiniz. Konustugunuz konular hakkinda daha derin bilgi sahibi olmaya calisiniz.
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 28 Nisan 2014, 00:23:36
ALLAHINIZ AŞKINA SİDİK YARIŞTIRMAYIN....
NE BİTMEK TÜKENMEK BİLMEZ DİL SEVDANIZ VARMIŞ..
Başlık: Ynt: C++
Gönderen: mufitsozen - 28 Nisan 2014, 00:29:39
Alıntı yapılan: muhittin_kaplan - 28 Nisan 2014, 00:23:36
ALLAHINIZ AŞKINA SİDİK YARIŞTIRMAYIN....
NE BİTMEK TÜKENMEK BİLMEZ DİL SEVDANIZ VARMIŞ..

Haklisiniz sayin @muhittin_kaplan. Konudan cok saptik.

Size yardimci olabilecegimiz bir bahis varsa ordan devam etmeye calisalim.

Başlık: Ynt: C++
Gönderen: mistek - 28 Nisan 2014, 00:40:32
@muhittin_kaplan hocam program olarak en son hangisinde karar kıldınız? Bende takip etmek istiyorum.
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 28 Nisan 2014, 00:41:51
@gerbay,
hocam yazdıklarınızı okumadım bile. Zira Bir dilin üstünlüklerini anlatmak istiyorsanız başka biriyle  atışmalara girin birşey demiyorum ama uzatmanın anlamı yok. Bu kadar dile hakim olanların bile bu seviyede "ben senden uzağa işerim, benim dilim daha iyi"  durumuna düşmesini görünce, bu işe yeni başlayan arkadaşları kestiremiyorum.
Bir an düşündünüzmü acaba "acaba Konudan Sapıyormuyuz diye". Ayrıca gerbay hocam Demekki Bağırtacak ediyorsunuz. garbage collection muş

mesaj birleştirme:: 28 Nisan 2014, 00:43:10

Alıntı yapılan: mistek - 28 Nisan 2014, 00:40:32
@muhittin_kaplan hocam program olarak en son hangisinde karar kıldınız? Bende takip etmek istiyorum.
iloveJAVA, müfit hoca ve gerbay yüzünden bıraktım çalışmıyorum.  :P

(visual studio 2013 express editionu kurdum)


mesaj birleştirme:: 28 Nisan 2014, 00:46:11

gerbay hocam bakın burada "nazikce" ne demişim.

https://www.picproje.org/index.php/topic,52839.msg400496.html#msg400496 (https://www.picproje.org/index.php/topic,52839.msg400496.html#msg400496)

mesaj birleştirme:: 28 Nisan 2014, 00:49:13

--------------------------------------------------------------------------------------------------------------------------
ayrıca MOD lar konuyu kapatabilirler, silebilirler çöpe atabilirler.
Başlık: Ynt: C++
Gönderen: mistek - 28 Nisan 2014, 00:49:31
Forumda, bir konu hakkında yeterli bilgi sahibi olmadan bulaşılmaması gereken 3 tehlikeli üye var. @z, @gerbay, @mufitsozen

Herkes kodunu şemasını bilerek konuşsun sonra problem çıkıyor :)


Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 28 Nisan 2014, 00:50:36
O zaman buranın ne anlamı var ?
Başlık: Ynt: C++
Gönderen: z - 28 Nisan 2014, 00:52:43
En iyisi bir fikra anlatayim.

Amerikada ziyah beyaz ayriminin yogun olarak yapildigi yillarda bizim Temel durakda otobus bekliyormus.

Otobus gelmis millet otobuse hucum etmis ve bos bulduklari yere oturmuslar. Daha otobus hareket etmeden yok beyazlar one oturacak yok siyahlar one oturacak diye buyuk bir kavga cikmis.

Temel bakmis is karisik ayaga kalkmis. Bir dakika demis. Her kes susmus.

Temel birakin siyahi beyazi farzedin ki hepimiz yesuluz demis. Milletin cok hosuna gitmis.

Ardindan haydi hepumuz inelum tekrar binelum ama acuk yesuller one koyu yesuller arkaya otursun demis.

(ASM)
Başlık: Ynt: C++
Gönderen: Mr.Java - 28 Nisan 2014, 00:55:27
Daha önce kullanan var mı diye tavsiye istedik klişe google search yap dedin.Bak arkadaşta derleyici tavsiyesi istemiş !

Madem ki seviyemi belirlediniz bana ağır gelecekmiş.Fikirlerinizi belirtin açık forum burası.Ben anlamam başkası anlar değil mi ?

Benim için önemli olan benim doğru bildiğimdeki varsa yanlışları bana izah edecek birisi.Aksi boy gösterisi.

Konuda yeterince saptı zaten.
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 28 Nisan 2014, 00:57:49
siz devam edin.

mesaj birleştirme:: 28 Nisan 2014, 01:09:20

Alıntı yapılan: mufitsozen - 28 Nisan 2014, 00:29:39
Haklisiniz sayin @muhittin_kaplan. Konudan cok saptik.

Size yardimci olabilecegimiz bir bahis varsa ordan devam etmeye calisalim.
Hocam Büyük Adamsınız Vesselam. (Yanlış Anlaşılmasın, bunu Kalbimden Samimi Olarak Yazıyorum. Hala -YAPMAYAĞ MI- diyenler var.)
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 28 Nisan 2014, 22:45:14
Atom fiziğine de profesörlüğe de lanet olsun (http://www.youtube.com/watch?v=dKY4h33LooY#)
Başlık: Ynt: C++
Gönderen: picusta - 29 Nisan 2014, 01:35:50
Muhittin hocam,
Forum formati icabi böyle parazitik olaylar oluyor tabii.
Pedagojik yaklasmak istiyorsun, hem kendin isin dogrusunu net olarak anlamak istiyorsun hem de yeni baslayanlar istifade etsin istiyorsun.
Gel gör ki istenmeden de olsa isine çomak sokuluyor.

Tesadüfen, uzun bir aradan sonra C++ ile bugün tekrar kod yazma sansim oldu.
Öglen basladigim projeyi aksami bitirdim. gcc ve Atmel (AVR ) kullandim (Arduino tabanli).

Projede 5 adet sinif yazdim, kisaca söyle :
- Communication :  Usb, seri ve Ethernet'ten bilgi aliyor, aldigi biligleri parser class'a gönderiyor. (Parser class'a pointer'i var), Parser class verileri  degerlendirip, kaydediyor icabinda ayni kanal'dan (Usb,seri veya ethernet, hangisinden geldi ise) cevap yaziyor

- Parser : Gelen verileri degerlendiyor: protokole göre, tabii ki state machine ile yapiliyor.  Mesaj tamamlaninca LedManager'ine haber veriyor.

- LedManager : Asil veri tabani  : Linked list seklinde Led nesnelerini tutuyor. Listeye ekleme,çikarma, arama vs.. yapiyor.

- Led : Dmx tarzi ledlerin yasam süresini, frekansini rengini vs.. ayarliyor ve hayatta tutuyor. (state machine, ve private degerler)

- LedProtokol: Led protokolü burada isleniyor, 800KHz clock'lu sinyal  üretiyor, gönderme buffer'i var.

Ana döngüde Communication sinifinin ana metodunu çagriyorum sonrada LedManagerin iki metodunu.
Her döngüde dinamik olarak birkaç LedProtokol nesnesini new ile üretip (degisik parametreler ile) sonunda delete ile yok ediyorum.

Optimizasyon olsun diye dinamik olarak ayirdigim buffer'i her nesne üretiminde static bir buffer'de tanittim. buffer'i memset yapiyorum sadece.
Başlık: Ynt: C++
Gönderen: Tagli - 29 Nisan 2014, 01:50:15
Alıntı yapılan: picusta - 29 Nisan 2014, 01:35:50
- Parser : Gelen verileri degerlendiyor: protokole göre, tabii ki state machine ile yapiliyor.  Mesaj tamamlaninca LedManager'ine haber veriyor.
Aklıma geldi de, acaba bu iş için flex ve bison ikilisi kullanılabilir mi? Bu yazılımlar sonuçta lexer ve parser'ı C (veya C++) kodu olarak üretiyor. Bunu fazla zorlanmadan mikrodenetleyici içine gömebilir miyiz yoksa fazla mı ağır gelir?
Başlık: Ynt: C++
Gönderen: picusta - 06 Mayıs 2014, 01:45:16
Alıntı Yapflex ve bison
Gerçekten agir gelir. MCU 8 bitlik , 2,5 kb RAM , 32 kb Flash'i var.RAM %80 dolu zaten, Flash ise % 60.
Burada parser dedigim aslinda gelen seri datayi state machine ile yorumlayan (baslangiç, ayiraç, son gibi ) gelen veriler ile bir nesnenin verilerini dolduran bir nesne.
Konu parser'dan açilmisken,  8 bit mikroislemci için neredeyse 0 RAM kullanan (hepsi Flash'ta) online JSON parser yazdim, günün birinde github'a open source koyarim, piyasadaki alternatiflerinden çok daha enteresan kanimca.

DNS yüzünden siteye giremedim bir süre, konuyu devam ettirmek adina söyle bir soru sorucagim :
A sinifi B sinifini kullansin diyelim. Ayni zamanda B sinifi A sinifina pointer'i var.

B nesnesi ise, kendi içisleri için C nesnesini kullaniyor. Hatta private bir fonksyonu C sinifini kullaniyor.

1. Soru :   A ve B siniflarinin .h ve .cpp dosyalari nasil olmalidir ? (asagidaki kod derlemede hata veriyor tabii)

2. Soru :   A sinifinin C sinifindan tamamen bi haber olmasi için B'nin  private fonskyonu (C'yi kullanan) nasil tanimlanmalidir  ?

Düzeltilmesi gereken kod :

A.h içerigi :

#ifndef A
#define A

#include "B.h" // B sinifini kullanmak için gerekli

class A
{
public:
...
private :
B *Bnesnesi;   // B Nesnesine  pointer

}
#endif


B.H içerigi :

#ifndef B
#define B

#include "A.h"  // A sinifina pointer için gerekli
#include "C.h"  // iç isleri için gerekli

class B
{
public:

private :
   A *ASinifi;                 // A 'ya pointer
   void fonskyonum(C *param); // Bu fonksyonu A sinifindan saklamak istiyorum

}
#endif




Başlık: Ynt: C++
Gönderen: bocek - 06 Mayıs 2014, 09:23:03
şöyle yapsak:
class D; // D, A'dan daha sonra tanımlandığından burda D'nin bir class olduğu derleyiciye bildirilmeli.
class A
{
private:
D *Dnesnesi;
int degisken;
};
class D // A'ya erişebilen bir sınıf tanımlıyoruz.
{
private:
A *Anesnesi;
};
class B : public D // A'ya erişebilmek için B'yi D'den türetiyoruz.
{
void fonksiyonum(C *param); // B'nin kendine özel fonksiyonunu yazıyoruz.
}
// böylece A'nın C'den haberi olmuyor. hatta B'den de haberi olmuyor.
// şunları yapabiliyoruz:
B b;
C *c = new C; // burda new ile ayırdığımız belleği işimiz bitince delete ile serbest bırakmamız gerek
b.fonksiyonum(c);
b.Anesnesi = new A; // burda new ile ayırdığımız belleği işimiz bitince delete ile serbest bırakmamız gerek
b.Anesnesi->degisken = 1;
//B A'nın herşeyine erişebiliyor ama A'nın hiçbirşeyden haberi yok.
Başlık: Ynt: C++
Gönderen: Tagli - 07 Mayıs 2014, 10:52:02
Alıntı yapılan: picusta - 06 Mayıs 2014, 01:45:16
A sinifi B sinifini kullansin diyelim. Ayni zamanda B sinifi A sinifina pointer'i var.
Zaman zaman benim de bunu yapasım geliyor. Nasıl olduğunu hatırlamıyorum ama C++'da bunu yapmanın biraz dolambaçlı bir yolu vardı diye hatırlıyorum. Ama bildiğim kadarıyla eğer bunu yapmamız gerekiyorsa programın mantıksal tasarımında bir hata var demektir.
Başlık: Ynt: C++
Gönderen: picusta - 07 Mayıs 2014, 11:29:31
Evet, @bocek arkadasimiz 1. soruya dogru cevap vermis.
Sorunun adi "recursive inclusion" (mutiple inclusion ile karistirilmamali).
Genel çözüm ise yaptigi gibi "Forward declaration" yapmaktir. Yani B sinifinda,
#include "A.h" yerine
class A;
ile bos bir sinifi tanimlamaktir.
A *pA  satirinda A 'nin sinif oldugunu biliyor, ama hangi sinif oldugunu daha bilmiyor.
Derleyici bir sinifa pointer kadar yer ayiriyor. Her sinifin pointer (adresi) ayni alani kapliyor, ne sinifi olursa olsun.

@Tagli, bunda tasarimda mantiksal bir hata oldugunu 100%  söyleyemeyiz. Bazi pattern'lerde baska türlü olmaz.
Ne yaptigini biliyorsan sorun yok. Yoksa bos yere nesneler arasi bagimlilik olur.

2. sorunun cevabi tam olarak tatmin edici degil. Neden 4. bir sinif yapilmali ? Baska türlü olmuyor mu ? Zaten siniflari 2 dosya'ya bölüyoruz .h interface, .cpp implementation genellikle.
Bir de interface olsun diye 4. sinif mi gerekli ?
Bu C++ nesneye yönelik programlama bili olarak bir zayifligi degil midir ?
private olan metot ve memberleri  .h  yerine baska bir .h da toplayamazmiyiz ? B_intern.h diye bir doya ile ?
Başlık: Ynt: C++
Gönderen: bocek - 07 Mayıs 2014, 12:22:25
- her sınıfı h ve cpp diye iki dosyaya bölmek şart değil biliyorsunuz. A B C ve D'yi tek bir h ile tanımlayabiliriz. Hatta interface ve implementation'u da bir araya toplayıp tek bir cpp veya h yapabiliriz (h dosyasında clas'ın gövdesini de tanımlıyorsak genelde hpp olur uzantı : h+cpp=hpp). Ama genelde başlık ve gövde farklı dosyalarda tanımlanır ki derleyici gereksiz kod üretmesin.

- fazladan bir sınıf oluşturmanın ne sakıncası var anlamadım. başka bir yöntem muhakkak vardır tabii onu da başkası bulsun :)

- Ayrıca b_intern.h diye ayırmak, private üyeleri başka yerde public'leri başka yerde tanımlamak diye bir şey yok.

- Zayıf olan C++ değil de bizim bilgimiz galiba.
Başlık: Ynt: C++
Gönderen: picusta - 07 Mayıs 2014, 14:11:53
er sınıfı h ve cpp diye iki dosyaya bölmek şart değil biliyorsunuz. A B C ve D'yi tek bir h ile tanımlayabiliriz. Hatta interface ve implementation'u da bir araya toplayıp tek bir cpp veya h yapabiliriz (h dosyasında clas'ın gövdesini de tanımlıyorsak genelde hpp olur uzantı : h+cpp=hpp). Ama genelde başlık ve gövde farklı dosyalarda tanımlanır ki derleyici gereksiz kod üretmesin.
Evet, hepsini tek dosyada toplayabiliriz. Nihayetinde derleyici öyle yapiyor.
Ama moduler veya nesneye yönelik programlamadan ne haber ? kod tekrar kullanimi için kötü bir durum.


- fazladan bir sınıf oluşturmanın ne sakıncası var anlamadım. başka bir yöntem muhakkak vardır tabii onu da başkası bulsun :)
C++ 'de Interface diye ayri bir yapi olmadigi için, bu 4. sinif interface yerine geçiyor soyut bir sinif olmasi tercih edilir.

- Ayrıca b_intern.h diye ayırmak, private üyeleri başka yerde public'leri başka yerde tanımlamak diye bir şey yok.
C'de moduller yazinca bu sekilde iki .h dosyasi yaziliyor, biri diger programlar tarafindan dahil ediliyor, digeri sadece .c implementation da.
O tanimlanan modülde "private" veri tiplerini, prototiplerini, degiskenlerini tanimlayabiliyoruz. Benim istedigim de o, nasil C++ 'de private kimse görmeden tanimlayabiliriz ?

istedigim .NET veya Java veya .. dilindeki gibi  partial sinif tanimlama. Yani bir class birden fazla dosyada tanimlaniyor.
Bu C++'da yapilabiliyor mu, nasil yapiliyor ? Bu konuda C++ sanki sadece forward declaration'a izin veriyor .

- Zayıf olan C++ değil de bizim bilgimiz galiba.
Kanimca C++ ile OOP yazmak için dilde noksanliklar var, encapsulation zayif, birkaç takla atarak, ilave kod yazarak bunlarin üstesinden gelinebilir tabii.
O yüzden C++'dan java, C# vs.. türetilmedi mi zaten ?
Bizim bilgimiz sInIrlI, o yüzden bu forumda tartisiyoruz, ustatlardan ve bilenlerden bilgi paylasmasini talep ediyoruz.

Başlık: Ynt: C++
Gönderen: mufitsozen - 07 Mayıs 2014, 15:59:09
Alıntı yapılan: picusta - 07 Mayıs 2014, 14:11:53

C++ 'de Interface diye ayri bir yapi olmadigi için, bu 4. sinif interface yerine geçiyor soyut bir sinif olmasi tercih edilir.


Kanimca C++ ile OOP yazmak için dilde noksanliklar var, encapsulation zayif, birkaç takla atarak, ilave kod yazarak bunlarin üstesinden gelinebilir tabii.

O yüzden C++'dan java, C# vs.. türetilmedi mi zaten ?
Bizim bilgimiz sInIrlI, o yüzden bu forumda tartisiyoruz, ustatlardan ve bilenlerden bilgi paylasmasini talep ediyoruz.

hocam saygi'da kusur etmek istemem ama evet bilginiz sinirli o yuzden c++'dan java turetilmedimi gibi COK YANLIS ifadeler kullanmayiniz. Acik forum oldugu icin daha az bilen arkadaslar burada yazildigi icin bu onermeleri dogru zannedebilir.

once C++ de OOP icin hicbir noksanlik yoktur ama cok buyuk ve karisik bir dildir. Hakimiyeti cok zordur.

C++'da interface gibi bir yapi yapmanin bircok yolu vardir ama en basiti butun fonksiyonlari virtual olan bir base class tanimlanir (vede virtual destructor) interface icin kullanilacak diger classlar bundan derive eder.  Ek olarak java'da multiple inheritance yoktur ama c++da vardir, aslinda javada interface tipi gibi bir tanimlama olmasinin nedenide javada multiple inheritance olmamasidir. Multiple inheritance kullanimi zordur bazi kurallara uymak gerekir, biraz daha tecrubeli olmak gerekir vb.

Bunun disinda eger amac javadaki gibi implementation detaylarini saklamak ve kullanicilara sabit bir arabirim sunmaksa c++da pimpl idiomuda kullanilabilir.


sayin @muhittin_kaplan"dan ozur dilerim. onun actigi bir konu basligi oldugunu farketmeden yazmisim. Yukaridaki yazilanlari yok farzedebilirsiniz.
Başlık: Ynt: C++
Gönderen: picusta - 07 Mayıs 2014, 17:37:18
Bu konuda bilgim sInIrlI tabii, önemli olan tartismaktir ve bilenlerin yol göstermesidir diye düsünüyorum.
Alıntı YapC++'da interface gibi bir yapi yapmanin bircok yolu vardir ama en basiti butun fonksiyonlari virtual olan bir base class tanimlanir (vede virtual destructor) interface icin kullanilacak diger classlar bundan derive eder.  Ek olarak java'da multiple inheritance yoktur ama c++da vardir, aslinda javada interface tipi gibi bir tanimlama olmasinin nedenide javada multiple inheritance olmamasidir. Multiple inheritance kullanimi zordur bazi kurallara uymak gerekir, biraz daha tecrubeli olmak gerekir vb.
Evet tamamen katiliyorum, benimde bir önceki mesajimda anlatmak istedigim bu : interface olayi soyut (virtual) bir sinif ile halledilmeli.
Sorumun amaci Baska bir yöntem var mi ?  diye merak etmem.

Alıntı Yapjavada interface tipi gibi bir tanimlama olmasinin nedenide javada multiple inheritance olmamasidir.
Benim bilidigim kadari ile neden - > sonuç iliskisi tam tersi, yani Java'yi tasarlayan isteyerek multiple inheritance'i yasaklamis, bu yüzden interface diye soyut siniflari ayirmis.

Bu konu ile ilgili söyle bir soru geliyor aklima:  C++ 'da iki siniftan (A ve B) türeyen bir sinif var diyelim, C sinifi. Tesaddüf A ve B'de ayni isimli fonksyonlar var.
Bu durumda nasil C sinifi A.fonk() ve B.fonk() ' u implement ediyor ?

Benim "türetildi" kelimesi tam olmamis tabii, anlamini açmak lazim. Yakin zamanda Java'nin tarihçesini okudum, orada asagi yukari böyle bir ibare vardi. demekten amacim, aslinda Java'yi yazan C++ 'dan esinlenerek yazilmasi, syntax'i asagi yukari ayni, birçok seyi atilmis, yerine yenileri getirilmis gibi .
Demek istedigim Java dili,  BASIC, COBOL, PASCAL, ADA, FORTRAN vs.. degilde, C++ 'u temel alinarak tasarlanmis. C#'ta isim benzerliginden belli.


@gerbay:  Hocam, .h 'da private tiplerin olmasi mesela rahatsiz ediyor. B sinifini kullanan niye B'nin private degiskenlerini bilsin ki ? Saklamak için ilave seyler yazmak gerekiyor.

@mufitsozen 'nin dedigi gibi mesela:
Alıntı YapBunun disinda eger amac javadaki gibi implementation detaylarini saklamak ve kullanicilara sabit bir arabirim sunmaksa c++da pimpl idiomuda kullanilabilir.
O yüzden OOP için dil kendinden kolaylik saglamiyor (diger diller'e nazaran).
Yani ayni programi C++ veya diger OOP'ye "yatkin" bir dille yazmaya kalksak,
C++'de digerine göre daha çok "satir" kod yazmak zorunda kaliriz gibime geliyor. (sadece OOP kismi için : nesne tanimlama vs...)

Başlık: Ynt: C++
Gönderen: picusta - 07 Mayıs 2014, 20:42:34
Bu konu ana fikrinden daha önce saptirilmis nahos tartismaya dönüsmüstür .
Ana konu C++,  xx dili degil veya karsilastirma degil.
Benim maksadim muhittin_kaplan'nin açtigi ana konuyu tekrar ayni ruh ile canlandirmak ve olaya pedagojik olarak yaklasmak, herseyi birden ortaya dökmeden adim adim gitmek.

C++'da nasil yapilir sorularini sormak, baska yolu varmi, bilgilenmek devami gelir diye bir iki kavrama deginmek : inheritance, inclusion, pimpl ve forward declaration idiom larini da görmüs olduk.

Yaptigim hata bir soruda C++'da bu nasil yapilir diye sorarken  xxx ve C# dilinden örnek vermem oldu, buda yanlis anlasilip parazitik tartisma hortlatti.
Üzüm yemek mi, bagciyi dövmekmi ?

Simdi konuya dönelim ve kalan sorulara bakalim :
Alıntı YapBu konu ile ilgili söyle bir soru geliyor aklima:  C++ 'da iki siniftan (A ve B) türeyen bir sinif var diyelim, C sinifi. Tesaddüf A ve B'de ayni isimli fonksyonlar var.
Bu durumda nasil C sinifi A.fonk() ve B.fonk() ' u implement ediyor ?

Evet güzel bir noktaya deginmissiniz, Arduino'nun yayilmasina C++ büyük katki sagladi, bu sayede derli toplu ve kolay kullanilan kütühaneler olustu.

Kendi fikrimce Z hocanin yaptigi ZIOS'u da C++ ile olsaydi, çok daha kullanisli olurdu.

Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 07 Mayıs 2014, 21:40:10
Alıntı Yapsayin @muhittin_kaplan"dan ozur dilerim. onun actigi bir konu basligi oldugunu farketmeden yazmisim. Yukaridaki yazilanlari yok farzedebilirsiniz.

Hocam buradan Çıkartmam gereken, "Muhittin_kaplan ın konularına yazmama kararı aldım" mı dır ?
Başlık: Ynt: C++
Gönderen: mufitsozen - 07 Mayıs 2014, 22:19:23
Alıntı yapılan: muhittin_kaplan - 07 Mayıs 2014, 21:40:10
Hocam buradan Çıkartmam gereken, "Muhittin_kaplan ın konularına yazmama kararı aldım" mı dır ?

Genel bir kural degil tabiiki.

Sizin didaktik bir amacla baslattiginiz bir konu basliginda java <-> c++ derken siz:

Alıntı YapALLAHINIZ AŞKINA SİDİK YARIŞTIRMAYIN....
NE BİTMEK TÜKENMEK BİLMEZ DİL SEVDANIZ VARMIŞ..

diye yazdiniz, dogru bildiklerimizi soyleyelim derken, istemedende olsa insanlari rahatsiz ettigimi farkettim.

bir daha boyle davranmamak konusunda kendime soz vermistim, farkinda olmadanda olsa yine ayni tartismalara girmisim, onu fark ettigim icin boyle yazdim.
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 07 Mayıs 2014, 22:28:33
eyvallah hocam ben anlamam gerekeni anladım ki kişilerde bundan kendine düşen çıkarımı yapmıştır umarım. herkesin sizlerin bilgi seviyesinde olmadığını  açılan konuların ve soruların soruların "aslında seviyeyi kendi içinde barındırdığını" anlamak zor olmasa gerek. Kara saban ile çiftcilik yapan birine "üst perdenen" tartışmalar yaratacak şekilde "ezilmemeli" öğrenmek istenen herneyse sönümlenme yaşatılmamalıdır.



mesaj birleştirme:: 07 Mayıs 2014, 22:31:47

Şunu Gerçekten Merak etmeye başladım

C++, RTOS vb uzmanlık gerektiren konuları "bu forumda" sormayalım mı ?
Arkadaşımın birinin dediği gibi "Bir konuda Bilgin yetersiz se Forumda Soru Sorma" durumuna mı geldik. Acaba "Ustalar- ki öğreten anlamı vardır usta da" ne der, diye otosansürmü yapıyoruz kendimize
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 07 Mayıs 2014, 22:44:50
Yanlış Bilgiler verildiğinde düzeltilsin. Ama velakin Konunun Uzatılmasına pek hacet görmüyorum. Arkadaş Israr Ediyor. Ve Sizlerde Israrcı Oluyorsunuz. Ve benim gibi "Acaba Ne diyorlar" C++ da ne yok muşta java da varmışin arasında kayboluyoruz.

Diğer "Yüksek Seviyeli Konulara Gelince" Forumda bir arama yapınız Ne demek istediğimi Bence Ortaya Koyacaktır.

mesaj birleştirme:: 07 Mayıs 2014, 22:46:39

Oto Sansüre gelince
Acaba C++ hakkında ne yazsam Gerbay Hoca ile  Müfit Hoca bana Kızmaz Demeye Başladım. Eli Sopalı Lise Hocaları Gibi Oldunuz Gözümde Tırsıyorum vallahi.  ::)
Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 07 Mayıs 2014, 22:58:49
Alınganlık Yapmanın Şu An İtibariyle Anlamı Yok. Ben "Düzeltme Yapılmasın" Yada "C++ vb Konularda Gerbay Hoca İle Müfit Hoca Yazmasın" Gibi birşey demedim, Haddimede değil. Yazmanız cevaplamanız için elimden geleni yaparım.

Ama Teferruatlar arasında ana teme/fikirden uzaklaşıp "öğrenmeyi öteliyoruz"
Başlık: Ynt: C++
Gönderen: picusta - 07 Mayıs 2014, 23:32:37
Bilgileri tartisarak düzeltelim.
Tartisma demek karsidakinin, önce karsidakinin ne demek istedigini anlama ve bakis açisini anlamadir.
Konuya ön yarigisiz girmektir, kendi bakis açisini empoze etmek degil.
Eger yanlis dedikleriniz benim yazdiklarimsa, yanlis olamaz, çünkü göreceli ve tartisilmaya açik konular :
- iki dil arasindaki benzerlik, akrabalik.
- ... C++ 'de baska türlü yapilmiyor mu  ? Dilin kendiliginden kolayliklari varmidir ?

Mr. xxx nickli arkadasin yazdiklarinda birkaç yanlislik olduguna katiliyorum. Fakat ben o nickli arkadas ile tanisikligim yok, baska biriyim, baska bakis açim var.

Alıntı Yapşimdi adamlar bunu niye özellikle yazmış düşünmek lazım..
Anladigim kadari ile : C++ ile natif kod'a (ASM) derleniyor.
Digerlerinde ise Virtual Machine veya Framework kurmak gerekiyor. Bunun için de Microsoft veya Sun (simdi Oracle) gibi sirketlere bagimli oluyorsunuz.

Forum formati icabi yanlis anlasilmalar sIklIkla oluyor. Yazilanlardan karsidakinin
Sizler gibi saygi deger hocalarin, deneyimli profesyonellerin (@muhittin_kaplan, @mufitsozen ve @gerbay) birbirlerini yanlis anlamasi genel çikar için çok kötü bir durum.
Sonuçta dördümüzün de amaci ayni : gömülü sistemlerde daha çok C++ kullanilmasini desteklemek.

Pozitif yaklasip, Embedded C++ hakkinda yeni konu mu baslatsak ?



Başlık: Ynt: C++
Gönderen: mistek - 07 Mayıs 2014, 23:43:52
@muhittin_kaplan hocam ben C++ konusunu takip etmeye çalışıyorum kitap, derleyicide tamam ama başlık olarak birden fazla C++ konusu olduğu için hatlar karışıyor. Tek bir başlık altında devam edilse şahsım adına çok güzel olur.

Az çok kitaptan C++ okudum gerbay,mufitsozen,picusta hocaların yazdıklarını okurken anlamıyorum ama olsun lazım olur ilerde mutlaka karşıma çıkacak diye not ediyorum böyle bakınca konuşmalar çok gereksiz gibi olmuyor tamam konu uzuyor karışıyor ama illa ki aradan bişeyler çıkarıyoruz. Tabii bu benim şahsi görüşüm.
Başlık: Ynt: C++
Gönderen: picusta - 07 Mayıs 2014, 23:52:19
@mistek, çok özür diliyorum, simdi farkettim ki @muhittin kaplan zaten iki yeni konu daha açmis.

Onlari görseydim dün bu konuyu canlandirmazdim. Konu önemli diye devam ettirmek istedim, meger azimli kaplan isin pesini birakmamis:
Adım Adım C++ öğreniyorum
C++ Şamataları

https://www.picproje.org/index.php/topic,52869.0/topicseen.html (https://www.picproje.org/index.php/topic,52869.0/topicseen.html)
https://www.picproje.org/index.php/topic,52891.msg402577/topicseen.html#msg402577 (https://www.picproje.org/index.php/topic,52891.msg402577/topicseen.html#msg402577)

Bilmeden troll yapmis oldum.

Başlık: Ynt: C++
Gönderen: muhittin_kaplan - 08 Mayıs 2014, 00:13:51
Hocam Adım Adım C++ ve Şamatadan Devam Edelim. Hocalarımda Davetlidir Mümkünse Katkılarını Bekliyorum.