Şimdi Ara

C++ + operator overloading

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
3
Cevap
0
Favori
1.282
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar.
    Magic the Gathering benzeri bir oyun için program yazdım, ancak şu anda elimde tek bir sorun var ve bunun için yardıma ihtiyaç duyuyorum.

    Elimde 2 adet class var ve bu classlardan biri Creature classı ve aynı zamanda bir adet de Enchantment classım var. + operatörü ile (+ kullanmak zorundayım) bir creature classı ile bir enchantment classını toplamam gerekiyor ve bu işlem enchantment classındaki 2 değeri creature classındaki 2 değer ile toplamak üzerine. Önce yazdığımda sıkıntının ap=ap+ench.ap ifadesindeki ap ifadesini eşitliğin iki yanında kullanmak üzerine olduğunu düşündüm ancak bu durumu değiştirdikten sonra sıkıntının operatörün kendisi ile ilgili olduğunu farkettim. Operatör işlemine sadece saçma şeyler yazdırmak için kullandığımda yine sorunla karşılaştım. main fonksiyonda toplama işlemini yorum satırına aldığımda hiçbir runtime hatası ile karşılaşmıyorum. Kodlarım aşağıda:

    İki classın definitionları

    class Creature: public Land{
    Cost cost;
    int ap;
    int hp;
    Enchantment *e;
    public:
    void operator+(Enchantment&);
    Creature(const string,const string,int, int,Cost*,const string);
    bool canEnchantable(Enchantment &);
    bool isAffordable(const Land *, const int);
    void print();
    };

    class Enchantment: public Land{
    friend class Creature;
    int ap;
    int hp;
    Cost cost;
    public:
    Enchantment(const string,const string,int, int,Cost*,const string);
    bool isAffordable(Land *, int);
    void print();
    };

    Bu da operatör declarationu

    void Creature::operator+(Enchantment& incench){
    cout << "Enchanting the creature" << endl;
    cout << "old ap: " << ap << endl;
    cout << "new ap: " << ap << endl;
    cout << "old hp: " << hp << endl;
    cout << "new hp: " << hp << endl;
    cout << "Creature enchanted" << endl;
    }

    Gördüğünüz üzere sadece yazı yazdırıyor. Creature enchanted yazısını gördükten sonra runtime hatası alıyorum. Yani scopetan çıkamıyor program. Gözümden kaçan bir hata mı var acaba? Yardımcı olabilirseniz sevinirim, teşekkürler.



    < Bu mesaj bu kişi tarafından değiştirildi :DHoroHoro:D -- 13 Nisan 2012; 12:29:41 >







  • Bildiğim kadarıyla, a ve b herhangi tipte değişkenler olsun. a+b işlemi aslında a.operator+(b) fonksiyonuna eşittir.

    Bence problem şu noktada çıkıyor:

    a + b + c gibi bir işlem söz konusuysa bu işlem a.operator+(b.operator+(c)) fonksiyonuna denk. Ancak b.operator+(c) fonksiyonunun dönüş tipi void! Yani dıştaki fonksiyona gelen parametre yok.

    Mantığını anlatmaya çalıştım, kısacası
    void operator+(Enchantment&) değil de
    Enchantment& operator+(Enchanment&) olmalı.
  • main fonksiyonu içeren cpp dosyasını ben yazmadığım için benden beklenen formattan dışarı çıkmam mümkün değil. Aynı şekilde bu fonksiyonun dönüş formatını void yerine başka bir duruma da dönüştürme şansına sahip değilim.

    c1+e şeklinde bir ifade kullanıldığı için bu Creature operator+(Enchantment&) olmak zorunda
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.