C++ Polymorphism fonksiyonu

Musa B.

Kilopat
Katılım
1 Ekim 2017
Mesajlar
1.633
Makaleler
4
Çözümler
13
Daha fazla  
Cinsiyet
Erkek
Merhaba, C++´da verilen ödevi yaparken son kısımda takıldım. Öncelikle programın kalıtım ve polymorphism üzerinden yapılması isteniyor.

Öncelikle yapıyı anlatarak başlayayım ki sorunumu tam olarak anlayabilesiniz;
Sekil adında bir base class mevcut, bu base class adet alt sınıfa sahip sekil2d ve sekil3d adında. Bu iki sınıf sekil sınıfından kalıtım yapılmış durumda ve şu an da ve ileride bahsedeceğim her değişken ve fonksiyon public olarak bulunmakta. sekil2d sınıfı daire, dikdortgen, ellipse ve ucgen adındaki alt sınıflara sahip bu bahsettiğim 4 sınıfın base classı sekil2d yani. sekil3d ise kup, kure ve silindir´e base class olarak görev yapmakta. Şimdi bizden istenen şey ödev dosyasında şu şekilde tanımlanmaktadır:
Polymorphism kullanarak Sekil cinsinden pointerları parametre olarak alıp bu pointerların adreslediği sekillerin hacimlerinin toplamını hesaplayan ve prototipi aşağıdaki satırda bulunan global fonksiyonu yazınız. double getToplamHacim(Sekil *sekilPtr[], const int N)
Bu fonksiyonun bir de 2D şekiller için olan ve toplam alanı bulması istenen hali vardı onu yaptım. Onla bunun arasındaki fark onda sekil sınıfında zaten alanları alan fonksiyon bulunuyordu. Ödevde bunun sekil sınıfında bulunması özellikle belirtilmişti lakin ödevde hacimleri alıp döndüren getHacim fonksiyonunun sekil3d sınıfında bulunması söylendi. Kalıtımı doğru yapmama rağmen sekilPtr üzerinden sekil3d sınıfında bulunan hacim değişkenine veya getHacim fonksiyonuna erişim sağlayamamaktayım.
Örnek vermem gerekirse getToplamHacim içerisinde şu şekilde bir kullanım yapmam gerekiyor:
C++:
toplamHacim = sekilPtr[0]->getHacim() + sekilPtr[1]->getHacim() + sekilPtr[2]->getHacim();
ama bunu sekil sınıfında yapmam lazım ve getHacim() fonksiyonu sekil sınıfından kalıtımlanan sekil3d sınıfındaki public bir fonksiyon. Yardımcı olabilir misiniz?
 
Son düzenleyen: Moderatör:
Bloglarımda paylaşmıştım fakat polymorphism (çok biçimlilik) nasıl çalışıyor anlaman adına benzer bir kod paylaşayım.

C++:
#include <iostream>
class Base{
    public:
        virtual int getNum() =0;
};
class Derived:public Base{
    public:
      int getNum(){
          return 5;   
        }
};
int main(int argc, char *argv[])
{
    Base* ptr = new Derived();
    std::cout<< ptr->getNum();
    delete ptr;
}
 
Bloglarımda paylaşmıştım fakat polymorphism (çok biçimlilik) nasıl çalışıyor anlaman adına benzer bir kod paylaşayım.

C++:
#include <iostream>
class Base{
    public:
        virtual int getNum() =0;
};
class Derived:public Base{
    public:
      int getNum(){
          return 5;  
        }
};
int main(int argc, char *argv[])
{
    Base* ptr = new Derived();
    std::cout<< ptr->getNum();
    delete ptr;
}
Hocam şöyle ki benim base class´ta virtual olarak tanımlama şansım yok yani base class´ta direkt double olarak tanımlanmak zorunda olarak vermiş hoca. Bunu üstteki cümlede belirttim. Sorunum da tam burada başlıyor, bu base class sınıfına ait bir objeden onun alt sınıfındaki bir fonksiyona erişmem lazım.
 

Yeni konular

Geri
Yukarı