Problems with the execution of class hierarchy

From: Piotre Ugrumov (aumulonenospam_at_tin.it)
Date: 12/31/03


Date: Wed, 31 Dec 2003 12:02:43 GMT

I had wrote this class hierarchy
Quadrilateral->Trapezoid->Parallelogram->Rectangle->Square.
I had compiled the classes without error, but when I start a test program
the values of the variables of the object are non inizialized.
Here I write The class Trapezoid(The only classe that run perfectly) and the
class Parallelogram.
How Can I resolve this problem?
Thanks.

#pragma once
#include "quadrilateral.h"

class Trapezoide :
 public Quadrilateral
{
public:
 Trapezoide(int=0, int=0, int=0, int=0, int=0, int=0, int=0, int=0);
 double getHeight()const;
 double getBaseM()const;
 double getBasem()const;
 double getPerimeter()const;
 double getArea()const;
 void print();
 ~Trapezoide(void);
private:
 int y1, y2;
 double area, perimetrr, h, baseM, basem;
protected:
 double l1, l2;
};

#include "StdAfx.h"
#include ".\trapezoide.h"
#include <cmath>
#include <iostream>
using namespace std;

Trapezoide::Trapezoide(int xa, int ya, int xb, int yb, int xc, int yc, int
xd, int yd)
{
 y1=ya;
 y2=yb;
 y2=y1;
 Quadrilateral::setVertex(xa, y1, xb, y2, xc, yc, xd, yd);
 if(yc>=yd)
  h=yc-y2;
 else
  h=yd-y2;
 if(h<0)
  h=h*(-1);
 baseM=xb-xa;
 if(baseM<0)
  baseM=baseM*(-1);

basem=sqrt(static_cast<double>((xc-xd)*(xc-xd))+static_cast<double>((yc-yd)*
(yc-yd)));

l1=sqrt(static_cast<double>((xc-xb)*(xc-xb))+static_cast<double>((yc-y2)*(yc
-y2)));

l2=sqrt(static_cast<double>((xa-xd)*(xa-xd))+static_cast<double>((y1-yd)*(y1
-yd)));
}
double Trapezoide::getHeight()const{
 return h;
}

double Trapezoide::getBaseM()const{
 return baseM;
}

double Trapezoide::getBasem()const{
 return basem;
}

double Trapezoide::getPerimeter()const{
 return l1+l2+baseM+basem;
}

double Trapezoide::getArea()const{
 return (baseM+basem)*h/2;
}
void Trapezoide::print(){
 Quadrilateral::print();
 cout<<"Base 1: "<<baseM<<", Base 2: "<<basem<<", Height: "<<h<<endl;
 cout<<"Perimeter: "<<getPerimeter()<<", Area: "<<getArea()<<endl;
}

Trapezoide::~Trapezoide(void)
{
}

#pragma once
#include "trapezoide.h"

class Parallelogram :
 public Trapezoide
{
public:
 Parallelogram(int=0, int=0, int=0, int=0, int=0, int=0, int=0, int=0);
 double getBase() const;
 void print();
 ~Parallelogram(void);
};

#include "StdAfx.h"
#include ".\parallelogram.h"
#include <cmath>
#include <iostream>
using namespace std;

Parallelogram::Parallelogram(int xa, int ya, int xb, int yb, int xc, int yc,
int xd, int yd)
{
 yd=yc;
 if(abs(xd-xa)!=abs(xd-xc))
  xd=xb+abs(xd-xa);
  Trapezoide::Trapezoide(xa, ya, xb, yb, xc, yc, xd, yd);
}

double Parallelogram::getBase()const{
 return Trapezoide::getBaseM();
}

void Parallelogram::print(){
 Quadrilateral::print();
 cout<<"Base: "<<getBase()<<", Height: "<<Trapezoide::getHeight()<<endl;
 cout<<"Lato: "<<Trapezoide::l1<<endl;
 cout<<"Perimeter: "<<Trapezoide::getPerimeter()<<", Area:
"<<Trapezoide::getArea()<<endl;
}
Parallelogram::~Parallelogram(void)
{
}

#include "stdafx.h"
#include "Trapezoide.h"
#include "Parallelogram.h"

int main()
{
 Trapezoide t(5,4,7,8,9,8,2,8);
 Parallelogram primo(1, 1, 4, 1, 4, 4, 1, 4);
 t.print();
 primo.print();
 return 0;
}
T is printed correctly, PRIMO has al the values equal to 0.



Relevant Pages