Keresés

Új hozzászólás Aktív témák

  • Sk8erPeter

    nagyúr

    válasz papa019 #754 üzenetére

    Hali!
    Az eredeti kód azért nem fordul, mert void visszatérési értékű a getParameter() függvényed a Gift osztályban, ami miatt a cout elszáll.
    Ezt megoldhatod úgy, hogy inkább double visszatérési értékűvé változtatod:
    double getParameter(){ return 0; }; /// void getParameter(){} helyett

    De ennél a kiíratást egyszerűbben oldanám meg, mondjuk lehetne minden osztálynak egy void print() művelete, ami épp a feladat által kiírt tulajdonságokat írná ki.

    Egy lehetséges példa a Te feladatodra vonatkozóan:
    -a Gift osztályban deklarálj egy
    virtual void print();
    függvényt, az összes többi osztályban pedig egy sima (nem virtuális)
    void print();
    függvényt.
    -maga a megvalósítás pedig a következőképpen nézhetne ki (csak egy lehetséges megoldás, lehetne rajta bőven csiszolni, de gyorsmegoldásként szerintem megfelel):

    using namespace std;

    void Gift::print()
    {
    cout << "Weight: " << baseWeight << endl;
    cout << "Quantity: " << db << endl;
    }

    void ColoredEgg::print()
    {
    cout << "Name: Colored Egg" << endl;
    cout << "Quantity: " << getWeight() << endl;

    //Paraméter:
    char colours[4][7] = { "RED", "GREEN", "BLUE", "VIOLET" };
    cout <<"Color: "<< colours[colour] << endl;
    }

    void ChocolateFigure::print()
    {
    cout << "Name: Chocolate Figure" << endl;
    cout << "Quantity: " << getWeight() << endl;

    //Paraméter:
    std::cout <<"Melting Point: "<< MeltingPoint << endl;
    }

    void Candy::print()
    {
    cout << "Name: Candy" << endl;
    cout << "Quantity: " << getWeight() << endl;

    //Paraméter:
    char quality_names[4][5] = { "HARD" , "SOFT" };
    std::cout <<"Quality: "<< quality_names[quality] << endl;
    }

    -Ezenkívül szerintem a destruktort a Gift osztályban virtuálissá kellene tenned, hogy ne legyen memóriaszivárgás:

    virtual ~Gift() {}

    A Testing.cpp-ben pedig a for ciklus akkor ez alapján a következőképpen nézhetne ki (a többi rendben van):

    for (int i = 0; i < 3; i++) // kiíratjuk
    {
    cout << "************************" <<endl; //csak az elválasztás kedvéért
    Present[i]->print();
    }

    Sk8erPeter

Új hozzászólás Aktív témák