[ fanfare @ 10.01.2011. 23:36 ] @
Nedavno sam dobio zadatak da koristeći osobine polimorfizma i :



Napisao sam kod koji prolazi kroz kompajler kao OK,ali mi nakon startovanja ne radi baš sve kako treba!
Da li mi neko može pomoći? U čemu je greška?
Kod sam dao u prilogu: polimorfizam

Napomena:Zadatak se sastoji u tome da izvedemo klasu Kvadrat iz klase Cetverougao. Kvadrat se konstruiše pomoću jedne tačke i dužine stranice. Zatim treba preklopiti operator -- tako da u klasi Kvadrat umanij broj tačaka za jedan tj. da konstruiše Trougao i ispiše njegove osobine, a od tog Trougla da napravi Duž i ispiše njene osobine.

Da li je dovoljno što sam u baznoj klasi Poligon napisao:

Code:
 virtual Poligon* operator--() =0; 
,

dok sam u izvedenoj klasi Cetverougao redefinisao tu operatorsku funkciju:

Code:
 Poligon* Cetverougao::operator--()
{     
     double x1,y1,x2,y2,x3,y3;
     x1=t[0].getX();
     y1=t[0].getY();
     x2=t[1].getX();
     y2=t[1].getY();
     x3=t[2].getX();
     y3=t[2].getY();
     Poligon *pC=new Trougao (x1,y1,x2,y2,x3,y3); 
     return pC;
}            



U main-u sve radi kako treba dok nedođe do preklopljne operatorske funkcije --() Gdje je greška????



[Ovu poruku je menjao fanfare dana 11.01.2011. u 20:36 GMT+1]

[Ovu poruku je menjao fanfare dana 12.01.2011. u 10:43 GMT+1]

[Ovu poruku je menjao fanfare dana 12.01.2011. u 22:11 GMT+1]
[ fanfare @ 12.01.2011. 09:53 ] @
OK! Bila je moja greska u main-u. Napisao sam --pK; umjesto --(*pK);
Ali svejedno neradi ono što bi trebalo. Kako da kad vrati pokazivač na osnovnu klasu, da to ustvari bude objekat Izvedene klase? Ako može neko da razumije šta hoću da kažem.

Code:
 #include <cstdlib>
#include <iostream>

#include "duz.h"
#include "trougao.h"
#include "cetverougao.h"
#include "kvadrat.h"

using namespace std;

int main(int argc, char *argv[])
{
    double x,y;  
    Poligon *pK;
     
    cout<<"Unesite koordinate donjeg lijevog vrha kvadrata: "<<endl;
    cout<<"\tx=";cin>>x;
    cout<<"\ty=";cin>>y;
    cout<<"Unesite duzinu stranice kvadrata:"<<endl;
    int a;
    cout<<"\ta="; cin>>a; 
    Kvadrat c(x,y,a);
    pK=&c;
    cout<<"Kreiran je kvadrat ABCD(stranice paralelne osama)"<<endl;
    pK->print();
    cout<<endl;
    cout<<"\tobim     : "<<pK->obim()<<endl;
    cout<<"\tpovrsinu : "<<pK->povrsina()<<endl;
    cout<<"------------------------------------------------------"<<endl;
    cout<<"Trougao ABC= --(Kvadrat ABCD)"<<endl;
    --(*pK);
    pK->print();
    cout<<endl;
    cout<<"\tobim     : "<<pK->obim()<<endl;
    cout<<"\tpovrsinu : "<<pK->povrsina()<<endl;
    cout<<"------------------------------------------------------"<<endl;
    cout<<"Duz AB= --(Trougao ABC)"<<endl;
    --(*pK);           
    pK->print();
    cout<<endl;
    cout<<"\tobim     : "<<pK->obim()<<endl;
    cout<<"\tpovrsinu : "<<pK->povrsina()<<endl;
    cout<<"------------------------------------------------------"<<endl;
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
 


[ Nedeljko @ 12.01.2011. 15:24 ] @
Šta program tačno radi, a šta bi trebao da radi? Šta tačno nije u redu?
[ Nedeljko @ 12.01.2011. 16:08 ] @
Evo ispravki. Menjana je main funkcija, kao i operator'-- u klasama Duz, Trougao i Cetvorougao.
[ fanfare @ 12.01.2011. 17:33 ] @
Citat:
Nedeljko: Šta program tačno radi, a šta bi trebao da radi? Šta tačno nije u redu?

Program bi trebao da:
1.) po unosu koordinata jedne tačke Kvadrata i dužine stranice odredi koordinate preostale tri tačke i izračuna obim i površinu kvadrata
2.)pri korišćenju prefiksnog operatora na objekat tipa Kvadrat,bi trebalo da vrati Trougao ( koordinate trougla iste kao i kvadrata tj. Trougao= --Kvadrat,umanji se za jednu tacku), ispiše trougao i izračuna obim i površina
3.)slično kao pod 2. s tim da sad treba od Trougla dobijenog pod 2. da se dobije duž: Duž= --Trougao

Citat:
Nedeljko: Evo ispravki. Menjana je main funkcija, kao i operator'-- u klasama Duz, Trougao i Cetvorougao.


Ako možeš Nedeljko da pokažeš i main!!
[ Nedeljko @ 12.01.2011. 17:58 ] @
Ah, da, zaboravio sam. Evo ga!
[ Nedeljko @ 12.01.2011. 18:19 ] @
Samo jedna napomena u vezi naslova: Ovde nigde nemaš višestruko nasleđivanje.
[ fanfare @ 12.01.2011. 21:19 ] @
OK! Grešku u vezi naslova sam ispravio.
VELIKO HVALA Nedeljku , uvidio sam u čemu sam griješio u main funkciji:
dodjeljivanje nove vrijednosti pokazivaču Osnovne klase pK=--(*pK);