Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: muhittin_kaplan - 28 Nisan 2014, 01:02:41

Başlık: C++ Şamataları
Gönderen: muhittin_kaplan - 28 Nisan 2014, 01:02:41
Hocalarım alınmayın kişisel değildir.

C++ öğrenmek istiyorum. bunu öğrenme isteğim PC de birşeyler yapmak değil, Gömülü sistemlere bu dille ile birşeyler yapmaktır.

Vs 2013 express edition u kurdum.

ve ilk class ımı yazdım.

MyClass.hpp
#define _USE_MATH_DEFINES

#include <math.h>


const float PI =3;
class Kure
{
    public:
        float r;
        float x, y, z;
        float hacim();
        float alan();
   
};


MyClass.cpp

#include "MyClass.hpp"


float Kure::hacim()
{
return (r*r*r*4*PI / 3);
};
float Kure::alan()
{
return (r * r * 4 * PI);
};


main.ccp

#include <iostream>
#include "MyClass.hpp"
using namespace std;

int main()
{
Kure k;
k.r=1.0;
k.x=2.0;
k.y=3.0;
k.z=4.0;
cout << "Alan =" << k.alan() << "\n"<< "Hacim=" << k.hacim() << "\n";
cin>>k.r;

return 0;

}
Başlık: Ynt: Yeniden C++
Gönderen: muhittin_kaplan - 28 Nisan 2014, 13:11:31
C++ öğrenmek isteyenler için güzel bir yazı.
http://acehreli.org/turkcecpp/cpp_ogrenmek.html (http://acehreli.org/turkcecpp/cpp_ogrenmek.html)

mesaj birleştirme:: 28 Nisan 2014, 13:30:34

CoIde ile C++ da yazmak için

http://www.coocox.org/forum/images/ckeditorfiles/20131023205634_How_to_use_CPlusPlus_in_CoIDE.pdf (http://www.coocox.org/forum/images/ckeditorfiles/20131023205634_How_to_use_CPlusPlus_in_CoIDE.pdf)
Başlık: Ynt: Yeniden C++
Gönderen: yamak - 28 Nisan 2014, 14:25:59
Hocam bir tavsiyede bulunmak istedim.Belki siz de biliyosunuzdur fakat kullanmadığınız için söylüyorum.r,x,y,z değerlerini kuruc metod yardımıyla atarsanız daha şık durur.Örneğin;
#include <math.h>


const float PI =3;
class Kure
{
    public:
        Kure(float r1,float x1,float y1,float z1);
        float r;
        float x, y, z;
        float hacim();
        float alan();
   
};


#include "MyClass.hpp"

Kure::Kure(float r1,float x1,float y1,float z1)
{
   r=r1;
   x=x1;
   y=y1;
   z=z1;

}
float Kure::hacim()
{
return (r*r*r*4*PI / 3);
};
float Kure::alan()
{
return (r * r * 4 * PI);
};


Kullanımı:
#include <iostream>
#include "MyClass.hpp"
using namespace std;

int main()
{
    Kure k(1,2,3,4);
    cout << "Alan =" << k.alan() << "\n"<< "Hacim=" << k.hacim() << "\n";
    cin>>k.r;

return 0;

}
Başlık: Ynt: Yeniden C++
Gönderen: muhittin_kaplan - 28 Nisan 2014, 14:28:50
Hocam inline fonkisyon ile yukarda yazdığımız gibi ayrı HPP ce CPP lerde dosya oluşturmanın ne gibi faydası zararı var ?
Bir inline fonksiyonla alakalı örnek verirmisiniz ? Neden Bu Ayrıma gerek duyuyorum.
Başlık: Ynt: Yeniden C++
Gönderen: yamak - 28 Nisan 2014, 14:48:26
Hocam inline fonksiyonları hız gerektiren durumlarda kullanırız.Eğer fonksiyonun içeriğinde çok fazla kod yoksa ve hız gerektiren bir durum varsa inline fonksiyon kullanabilirsiniz.Örneğin lcd'ye 1 byte data ya da komut gönderen fonksiyonları inline yaparız ki fonksiyon her çağırıldığında program counter o fonksiyonun bulunduğu yere sıçramasın.Bu arada inline fonksiyonlar derleme esnasında derleyici tarafından her çağırıldığı yere kopyalanırlar.Yani fonksiyonu çağırdığınız yerde sanki fonksiyonun içeriğindeki tüm kodları yazmışsınız gibi olur.Böyle PC'nin dallanmasına gerek olmaz.
Umarım sorunuzu doğru anlamışımdır.
Başlık: Ynt: Yeniden C++
Gönderen: muhittin_kaplan - 28 Nisan 2014, 14:56:43
Anladım Hocam teşekkür ederim.

mesaj birleştirme:: 28 Nisan 2014, 15:11:12

şimdi hocam, aşağıda clasın ve metodu aynı dosyada ve in line olarak oluşturduk (değil mi)
veri private olarak tanımlı bundan dolayı main den ulaşamam ama clas içerisinde ulaşabilirim. ben bu yapıyı HPP ve CPP olarak bölmek istesem nasıl veriye ulaşırım (bu haliyle taşımak hataya neden olur mu)
(set ve get metodları ile yapılabilir sanırım.)

CPP dosyası
class MyClass {
    int veri;
public:
    void MyClass(int data){
         veri=data;
          sdt::cout<<veri;
     }


MAIN


main(){
     MyClass Z;
      z.MyClass(3);


mesaj birleştirme:: 28 Nisan 2014, 15:17:36

https://www.google.com.tr/url?q=http://ninova.itu.edu.tr/tr/dersler/bilgisayar-bilisim-fakultesi/1250/blg-252/ekkaynaklar%3Fg120810&sa=U&ei=OkZeU6zxAu2h7AaFoYCgCA&ved=0CDYQFjAE&usg=AFQjCNEgLaNZ8QJVuiqzGWIsW4G8gZUxaA (https://www.google.com.tr/url?q=http://ninova.itu.edu.tr/tr/dersler/bilgisayar-bilisim-fakultesi/1250/blg-252/ekkaynaklar%3Fg120810&sa=U&ei=OkZeU6zxAu2h7AaFoYCgCA&ved=0CDYQFjAE&usg=AFQjCNEgLaNZ8QJVuiqzGWIsW4G8gZUxaA)
Başlık: Ynt: Yeniden C++
Gönderen: Tagli - 28 Nisan 2014, 16:10:54
Ben de C++'ı yeni yeni öğrendiğim için belki bana pek söz düşmez ama aklıma gelen bir iki yere değineyim dedim:

Inline fonksiyonlar genelde header dosyasının içindeki sınıf tanımlamasının içine doğrudan gömülürler. Bu yapıldığında inline ifadesini yazmaya gerek kalmaz, derleyici o fonksiyonu otomatik olarak inline kabul eder. Bunun faydası var mıdır, varsa nedir ben de bilmiyorum ama anladığım kadarıyla yaygın usul bu. Şöyle:
class Kure
{
    public:
        Kure(float r1,float x1,float y1,float z1);
        float r;
        float x, y, z;
        float hacim() { return (r*r*r*4*PI / 3); }
        float alan() { return (r * r * 4 * PI); }
};

Bu arada, genel olarak veriler private, arayüz fonksiyonları public olarak tanımlanır. Değişkenlere doğrudan erişim izni verilmez.

Header dosyalarına mutlaka Header Guard (http://en.wikipedia.org/wiki/Include_guard) konulur. Böylece aynı dosyanın yanlışlıkla birden fazla kez eklenmesi engellenir.

Başlangıçta biraz kafa karıştırıcı olacak belki ama değinmeden geçmeyeyim, "bu da varmış" diye aklınızda kalsın: Constructor'larda üye değişkenlerin atanması genelde initializer list denilen bir yazım şekli ile yapılır. Bu örnekte herhangi bir fark yaratmasa da, sınıf içindeki referanslar gibi sonradan değişemeyecek verilerin atanması sadece bu yolla yapılabilmektedir. Ayrıca türetilmiş sınıflarda, ana (base) sınıfın constructor'ının çağrılması da bu şekilde yapılır. Şöyle:
Kure::Kure(float r1,float x1,float y1,float z1)
: r(r1), x(x1), y(y1), z(z1)
{
//Buraya bir şey yazmaya gerek kalmadı.
}


Son olarak, verilen aşağıdaki çağırma şekli hatalı:
MyClass z;
z.MyClass(3);

Öncelikle, zaten ilk satır hatalı çünkü bu MyClass z(void) şeklini alır. Ama MyClass'a biz argüman alan bir constructor tanımlayarak, varsayılan argümansız constructor'ın derleyici tarafından oluşturulmasını engelledik. Varsayılanı da istiyorsak elimizle boş bir tane yazmamız lazım. Aslında bunun bir yolu daha vardı, derleyiciye "sen varsayılanı da yine de oluştur" diyebiliyorduk ama C++11'e özgü bir özellik olabilir belki, aklımda kalmamış.
Ekleme: Şimdi aklıma geldi, argümanlara varsayılan değerler atanarak da çözüm üretilebilir.
İkinci satır da hatalı. Nesne üzerinden constructor çağrılmaz. Ortada oluşmuş z diye bir nesne varsa constructor'ın zaten işi kalmamıştır.

Not: Yeni öğrenen biri olarak yazdıklarımda hatalar olabilir, affola.
Başlık: Ynt: Yeniden C++
Gönderen: bocek - 28 Nisan 2014, 17:21:58

class Kure
{
    public:
        Kure(float r1,float x1,float y1,float z1);
        float r;
        float x, y, z;
        float hacim() = { return (r*r*r*4*PI / 3); } // burada = konulmayacak
        float alan() = { return (r * r * 4 * PI); } // // burada = konulmayacak
};

@tagli, fonksiyon tanımları class'ın içinden yapılırken '=' konur diye bir şey yok.

kurucu fonksiyonu parametre geçmeden default değerlerle oluşturmak istersek şöyle bir tane daha kurucu fonksiyon tanımlarız.


Kure ():r(1.0),x(0),y(0),z(0) {};

Nasılsa C++ 'ta "function overloading" diye bir şey var. Aynı isimde fakat farklı sayıda ve türde parametre alan fonksiyonlar olabiliyor.


Kure kure; // şu anda r=1, x=0, y=0, z=0 olan bir kure'miz var.
Başlık: Ynt: Yeniden C++
Gönderen: Tagli - 28 Nisan 2014, 18:32:06
Doğru, = olmayacak, dalgınlığıma gelmiş.
Başlık: Ynt: C++ Şamataları
Gönderen: muhittin_kaplan - 28 Nisan 2014, 18:41:18
Mod Arkadaşlar  buranın adını C++ Şamataları Olarak Değiştiririse Sevinirim
Başlık: Ynt: C++ Şamataları
Gönderen: muhittin_kaplan - 29 Nisan 2014, 11:43:26
Fonksiyon Aşırı tanımlanmasından şunumu anlamalıyım.

int fonksiyon(int x,int y){
     return Z
}

float fonksiyon(float x,float y, int t){
    return K
}

int main (){
   int A;
   A=fonksiyon (3,5); // ilk yazdığım fonksiyon çalışır

   float B;
   B=fonksiyon (3.0,5.0,93); // ikinci yazdığım fonksiyon çalışır
foksiyon isimleri aynı olmasına rağmen aldığı param durumuna göre fonksiyon çalışıyor. (iyiymiş, Gömülü sistemde Parametre alamayan altprogramlar yazmak zorunda kalan dillere bakarsak bu ballı kaymak.)

Başlık: Ynt: C++ Şamataları
Gönderen: bocek - 29 Nisan 2014, 12:25:13
dha asıl tadına varmadın muhittin_kaplan.
overloading sadece fonksiyonlarla da sınırlı değil. 'operator overloading' ile operatörlere de ekstra işlev yükleyebiliyorsun.

mesela elma ile armutu toplayabilirsin operator overloading ile.

ya da bir Kure'yi diğer bir Kure'ye "=" operatörü ile eşitleyebilirsin.
örneğin:

class Kure
{
    public:
        Kure(float r1,float x1,float y1,float z1);
        Kure& operator= (const Kure& kure)  // = operatörüne ekstra işlev yüklüyoruz.
         {
             r = kure.r;
             x = kure.x;
             y = kure.y;
             z = kure.z;
         };
        float r;
        float x, y, z;
        float hacim() { return (r*r*r*4*PI / 3); }
        float alan() { return (r * r * 4 * PI); }
};


artık şunu yazabiliriz.


Kure a,b;
a = b; // b'nin özelliklerini bizim yazdığımız fonksiyon aracılığıyla a'ya atadı.



mesaj birleştirme:: 29 Nisan 2014, 12:32:00

ya da iki küre eşit mi değil mi karşılaştırma operatörünü yazalım.

    bool Kure::operator== (const Kure& kure) { return ( r== kure.r && x== kure.x && y == kure.y && z == kure.z); };

fonksiyon tanımını class tanımı dışında bir yerde yaptığımızdan fonksiyonun başına Kure:: yazdık ki kimin nesidir belli olsun.
tabii bu durumda class tanımı içinde fonksiyonu deklare etmeyi unutmuyoruz.

class Kure {
....
bool operator== (const Kure&);
...
}




artık şunu yapabiliriz;

Kure a,b;
....
if (a == b)
{
  ....
}

Başlık: Ynt: C++ Şamataları
Gönderen: kantirici - 03 Mayıs 2014, 00:07:46
elimizde bir class ın içnde yazılmış 2 fonksiyon olsun. Fonksiyonlar aşırı yükleme ile kullanılıyor.

fonksiyon(float x,float y, int t,int t3)

fonksiyon(float x,float y)


şimdi bir yerde  fonksiyon(float x,float y, int t ) şeklinde bir kullanım olabilir mi? Olursa 4 parametre alan fonksiyona giderse 4. parametre ne olur?

Başlık: Ynt: C++ Şamataları
Gönderen: muhittin_kaplan - 03 Mayıs 2014, 00:22:05
yapmak istediğin aslında 4 parametresi olan fonk. kullanmak ama 3 parametremi vereceksin ?
Başlık: Ynt: C++ Şamataları
Gönderen: kantirici - 03 Mayıs 2014, 00:26:36
hocam arduino da yazılmış bir kütüphanede gördüm. Fonksiyon A, 4 parametre alıyor fakat 3 parametre geçirilmiş. Bir diğer fonksiyon A ise 2 parametre alıyor.
Başlık: Ynt: C++ Şamataları
Gönderen: muhittin_kaplan - 03 Mayıs 2014, 00:30:16
Derlemez hata verir
Error 1 error C2661: 'MyClass::Fonk1' : no overloaded function takes 3 arguments


mesaj birleştirme:: 03 Mayıs 2014, 00:30:31

#include <iostream>
using namespace std;

class MyClass
{
public:
MyClass(int x,int y);
~MyClass();
float Fonk1(float,float,int,int);
float Fonk1(float,float );

private:
int ilkSayi;
int İkinciSayi;
};

MyClass::MyClass(int x,int y) //Yapıcı
{
ilkSayi=x;
İkinciSayi=y;
}

MyClass::~MyClass()//Yıkıcı
{
ilkSayi=1;
İkinciSayi=1;
}
float MyClass::Fonk1(float x,float y, int t,int t3)
{

return x*y*t*t3;

}

float MyClass::Fonk1(float x,float y)
{


return x*y;
}


int main(){

MyClass K(3,5);
//T.İkinciSayi=30; //HATALI BIR ISLEM CUNKI SADECE CLASS ICINDEN ERİŞİLİR.
cout<<K.Fonk1(3.0,4.5,3)<<endl ;
bool z=1;
cin>>z;
return 0;

}


mesaj birleştirme:: 03 Mayıs 2014, 00:31:47

Yöntemi vardır belkide ama şu anki bilgim (ve bana derleyicinin söylediği) bu.
Başlık: Ynt: C++ Şamataları
Gönderen: mufitsozen - 03 Mayıs 2014, 01:16:15
default parameters!


void PrintValues(int nValue1=10, int nValue2=20, int nValue3=30)
{
    using namespace std;
    cout << "Values: " << nValue1 << " " << nValue2 << " " << nValue3 << endl;
}



PrintValues(1, 2, 3);
PrintValues(1, 2);
PrintValues(1);
PrintValues();


Alıntı Yap
The following output is produced:

Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30

Başlık: Ynt: C++ Şamataları
Gönderen: muhittin_kaplan - 03 Mayıs 2014, 01:21:32
eğer param geçilmezse bu değeri kabul et.

mesaj birleştirme:: 03 Mayıs 2014, 01:22:22

aynen dediğiniz gibi oluyor.  ;)
Başlık: Ynt: C++ Şamataları
Gönderen: bocek - 03 Mayıs 2014, 06:35:56
yalnız dikkat edin ilk default değer verdiğiniz parametreden sonra hep default değer vermelisiniz.
örnek:

void foo(int a, int b=20, int c); // yanlış kullanım.

void foo(int a, int b=20, int c=30); // doğru kullanım. ilk default değer verilen parametreden sonra gelen her parametreye default değer verilmeli


diğer türlü hangi parametreyi siz verdiniz, hangisini default olarak alacak bilemez derleyici.

alakası yok ama şunun gibi

int a,b=1,c; // yanlış
int a,b=1,c=0; // doğru

Başlık: Ynt: C++ Şamataları
Gönderen: kantirici - 03 Mayıs 2014, 10:46:44
default parametre yok ama .

uint8_t PCD_TransceiveData(uint8_t *sendData, uint8_t sendLen, uint8_t *backData, uint8_t *backLen, uint8_t *validBits, uint8_t rxAlign, uint8_t checkCRC) {
    uint8_t waitIRq = 0x30; // RxIRq and IdleIRq
    return PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, sendData, sendLen, backData, backLen, validBits, rxAlign, checkCRC);
} // End PCD_TransceiveData()


Fonksiyon böyle tanımlanmış ve başka bir fonksiyon içerisinden şöyle çağırılmış.

status = PCD_TransceiveData(&command, 1, bufferATQA, bufferSize, &validBits );


Bir başka fonk. ise;

uint8_t  PCD_CommunicateWithPICC( uint8_t command, uint8_t waitIRq, uint8_t  *sendData, uint8_t sendLen, uint8_t *backData, uint8_t *backLen, uint8_t *validBits, uint8_t rxAlign, uint8_t checkCRC )

tanmlanmış ve şöyle çağırılmış.

return PCD_CommunicateWithPICC(PCD_MFAuthent, waitIRq, &sendData[0], sizeof(sendData));


İlgli class burada. https://github.com/miguelbalboa/rfid/blob/master/MFRC522.cpp
Başlık: Ynt: C++ Şamataları
Gönderen: bocek - 03 Mayıs 2014, 11:41:24
@kantirici, siz cpp dosyasında fonksiyon tanımlama kısmına bakıp default parametre yok diyorsunuz.
oysa mfrc522.h dosyasında deklarasyon kısmında fonksiyon şöyle tanımlanmış:

byte PCD_TransceiveData(byte *sendData, byte sendLen, byte *backData, byte *backLen, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false);


zaten parametrelere default değer verme işi normalde deklarasyon kısmında yapılır.
Başlık: Ynt: C++ Şamataları
Gönderen: kantirici - 03 Mayıs 2014, 12:10:47
@bocek evet hocam gözden kaçmış orası. Teşekkürler arkadaşlar.
Başlık: Ynt: C++ Şamataları
Gönderen: pea - 05 Haziran 2014, 21:38:46
mbed ile bir proje yaparken ilk class'ımı yazmam gerekti ve dolayısıyla C++'a girişmiş bulundum. Birkaç ders okudum, onlarca örnek baktım ve ilk class'ımı yazdım ancak sonuç hüsran, çalışmadı.

.h dosyam şu şekilde:
/*
Pololu Dual MC33926 Motor Driver Shield kütüphanesi icin tanimlamalar.
*/
#ifndef MotorShield_h
#define MotorShield_h

#include "mbed.h"

class MotorShield
{
public:
    // Constructor/yapıcı fonksiyon:
    MotorShield(PinName pwm1, PinName dir1, PinName fb1, PinName pwm2, PinName dir2, PinName fb2, PinName nD2, PinName nSF);

    // Default değerli Contructor/yapıcı fonksiyon:
    MotorShield();

    // Motor hızını ayarla
    // speed: 1.0 = tam hız ileri, -1.0 = tam hız geri
    // motor: 0 = Motor1, 1= Motor2
    void setSpeed(float speed, bool motor);
    void setSpeed(float speed);
    // Motor akımını oku
    float getCurrent(bool motor);

    // Hata durumunu oku
    bool getFault(void);

protected:
    PwmOut _pwm1;           // motor 1 pwm
    DigitalOut _dir1;       // motor 1 yön
    AnalogIn _fb1;          // motor 1 akım
    PwmOut _pwm2;           // motor 2 pwm
    DigitalOut _dir2;       // motor 2 yön
    AnalogIn _fb2;          // motor 2 akım
    DigitalOut _nD2;
    DigitalIn _nSF;
};

#endif


.cpp dosyam da böyle:

/*

Pololu Dual MC33926 Motor Driver Shield kütüphanesi fonksiyonları
dir : Motor direction input
pwm : Motor speed/pwm input
nSF : Not of Status flag indicator(0 = fault)
fb  : Current sense feedback ( 525mV/A) > if over 6.5A(3.4V), analog port is fried
nD2 : When low, disables both outputs of both motor channels
*/

#include "MotorShield.h"
#include "mbed.h"

MotorShield::MotorShield(PinName pwm1, PinName dir1, PinName fb1, PinName pwm2, PinName dir2, PinName fb2, PinName nD2, PinName nSF) :
    _pwm1(pwm1), _dir1(dir1), _fb1(fb1), _pwm2(pwm2), _dir2(dir2), _fb2(fb2), _nD2(nD2), _nSF(nSF) {

    _pwm1.period_ms(0.1f);      // 10Khz pwm
    _pwm1 = 0;                 // Duty 0 = brake
    _dir1 = 0;                  // 0: forward , 1: reverse

    _pwm2.period_ms(0.1f);
    _pwm2 = 0;
    _dir2 = 0;

    _nD2 = 1;
}

// Default shield connections, compatible with Arduino form factor
MotorShield::MotorShield():
_pwm1(D9), _dir1(D7), _fb1(A0), _pwm2(D10), _dir2(D8), _fb2(A1), _nD2(D4), _nSF(D12) {
   
    _pwm1.period_ms(0.1f);      // 10Khz pwm
    _pwm1 = 0.5f;                 // Duty 0 = brake
    _dir1 = 0;                  // 0: forward , 1: reverse

    _pwm2.period_ms(0.1f);
    _pwm2 = 0;
    _dir2 = 0;

    _nD2 = 1;
}

// motor.speed(0.8, 1) > 2. motoru 0.8 hızında çalıştırır.
// motor.speed(0.1, 0) > 1. motoru 0.1 hızında
void MotorShield::setSpeed(float speed,bool motor)
{

    if (speed >= 0) {
        // Hız 0'dan büyükse ileri(dir =0), 0'dan küçükse abs al ve geri(dir=1)
        if(!motor) {        // !0 = 1, yani ilk motor seçilmişse(bool motor = 0 ise)
            _pwm1 = speed;
            _dir1 = 0;
        } else {
            _pwm2 = speed;
            _dir2 =0;
        }
    }

    else {
        if(motor) {        // Motor 2 ise
            _pwm2 = speed;
            _dir2 = 0;
        } else {
            _dir1 = 1;
            _pwm1 = abs(speed);
        }
    }
}

void MotorShield::setSpeed(float speed)
{
    _pwm1=speed;
}

float MotorShield::getCurrent(bool motor)
{
    if (motor)  return _fb2;
    else return _fb1;
}

//Hata durumuna bak
bool MotorShield::getFault()
{
    return (_nSF);
}



Compiler hata vermiyor, kart çalışıyor ancak Pwm çıkışı alamıyorum. Constructor işinde hatam var sanırım ama bulamadım.
Derdim nedir?
Başlık: Ynt: C++ Şamataları
Gönderen: pea - 06 Haziran 2014, 17:21:02
Pwm kütüphanesini yanlış kullanıyormuşum. .period_ms(int) şeklindeymiş. Float verince niye hata vermemiş, ne yapmış anlamadım.
Başlık: Ynt: C++ Şamataları
Gönderen: unknownperson - 15 Ağustos 2014, 23:43:08
Merhaba konuyu çok dağıtmak da istemiyorum fakat benim ufak bir sorum olacak. C'den sonra C++ öğrenmeye karar verdim bu class yapılarını öğrenmeye başladım fakat bana biraz anlamsız geldi. Mesela Struct yapısı farklı veri tiplerini birleştirmeye yarıyor mantıklı bir görevi var ama class yapısının ne mantığını ne görevini anladım. Örneklere baktığımda kendi kendime "e bunu main içinde de yapabilirim neden class açıyoruz ki" diyorum. .Bir de fonksiyonların programı kısaltma dışında etkin bir şekilde kullanımı var mıdır ? Hocalarım kısa bir açıklama yaparsanız sevinirim.
Başlık: Ynt: C++ Şamataları
Gönderen: mir_as82 - 16 Ağustos 2014, 10:12:14
Cevabin yarisini kendin vermiş sin, diğer yarisi da ayni yapinin içinde fonksiyon kullanabiliyorsunuz. Yani hem veriler hem o verileri manipule eden(get, set) fonksiyonlar ayni yapinin içinde. Mantıksal soyutlama, inheritance, encapsulation ve polimorfizm sinif in anahtar kelimeleridir.