2016-04-06 15 views
0

Miras sınıflarını kullanarak, 2d şekillerinin alanını ve 3 boyutlu şekillerin hacmini hesaplamaya çalışıyorum. Şimdi diziye erişmek için şekle ihtiyacım var ve sonra alanın ya da şeklin hacmini hesaplayıp hesaplamayacağına karar verdim. Son amaç, alanın ve/veya hacminin şeklini söyleyerek çıktı vermek ve çıktı sağlamaktır. Dizinin nesne adlarına nasıl erişirim? TeşekkürArray öğesinden Object adlarına erişme

/--------------------------------------------------------- 
#ifndef SHAPE_H 
#define SHAPE_H 

const double PI = 3.14159265359; 
//Base Class--------------------------------------------- 
Class Shape { 
    protected: 
     //Dimensions 
     int dimensions; 
     double area; 
     double volume; 
    public: 
     //Default Constructor 
     Shape(); 
     //Destructor 
     ~Shape(); 
     //Get Dimension function 
     double getDimensions(); 
     //virtual function 
     virtual double getArea(); 
     virtual double getVolume(); 
}; 
//Shape Type----------------------------------------------- 
class TwoDimensionalShape : public Shape { 
    protected: 
     double d1, d2; 
    public: 
     double get_d1() { return d1; } 
     double get_d2() { return d2; } 
     double set_d1(double x) { d1 = x; } 
     double set_d2(double x) { d2 = x; } 
}; 
class ThreeDimensionalshape : public Shape { 
    protected: 
     double d1, d2, d3; 
    public: 
     double get_d1() { return d1; } 
     double get_d2() { return d2; } 
     double get_d3() { return d3; } 
     double set_d1(double x) { d1 = x; } 
     double set_d2(double x) { d2 = x; } 
     double set_d3(double x) { d3 = x; } 
}; 
//two dimensionals Shape classes------------------------- 
class Circle : public TwoDimensionalShape { 
    public: 
     Circle(); //default constructor 
     Circle(double r); //regular constructor 
     double getArea(); //get area function 
}; 
class Square : public TwoDimensionalShape { 
    public: 
     Square(); 
     Square(double dim); 
     double getArea(); 
}; 
class Triangle : public TwoDimensionalShape { 
    public: 
     Triangle(); 
     Triangle(double dim, double dim2); 
     double getArea(); 
}; 
//three dimensional shape classes------------------------- 
class Sphere : public ThreeDimensionalshape { 
    public: 
     Sphere(); 
     Sphere(double dim); 
     double getArea(); 
     double getVolume(); 
}; 
class Cube : public ThreeDimensionalshape{ 
    public: 
     Cube(); 
     Cube(double dim); 
     double getArea(); 
     double getVolume(); 
}; 
class Tetrahedron : public ThreeDimensionalshape{ 
    public: 
     Tetrahedron(); 
     Tetrahedron(double dim); 
     double getArea(); 
     double getVolume(); 
}; 

-

//--------------------------------------------------------- 
#include <stdlib.h> 
#include <cmath.h> 

#include "shape.h" //header file 

using namespace std; 
//---------------------------------------------- 
//Default constructor 
Shape::Shape() : dimensions(0), area(0), volume(0) { } 
//Regular constructor 
Shape::Shape(int d) : { 
    dimensions = d; 
} 
//Function getDimensions 
double Shape::getDimensions() { 
    return dimensions; 
} 

//Two dimensional shapes----------------------------------- 
//Default constructor-------------------- 
Circle::Circle() { 
    d1 = 1 ; 
} 
//Regular constructor-------------------- 
Circle::Circle(double r) { 
    d1 = r; 
} 
//Circle area 
double Circle::getArea() { 
    area = PI * pow(d1, 2); 
    return area; 
} 
//Default constructor-------------------- 
Square::Square() { 
    d1 = 1 ; 
    d2 = 1; 
} 
//Regular constructor-------------------- 
Square::Square(double dim){ 
    d1 = dim; 
    d2 = dim; 
} 
//Square area 
double Square::getArea(){ 
    area = pow(d1, 2); 
    return area; 
} 
//Default constructor-------------------- 
Triangle::Triangle(){ 
    d1 = 1; 
    d2 = 1; 
} 
//Regular constructor-------------------- 
Triangle::Triangle(double dim, double dim2){ 
    d1 = dim; 
    d2 = dim2; 
} 
//Triangle area 
double Triangle::getArea(){ 
    area = (d1 * d2)/2; 
} 
//Three dimensional shapes----------------------------------- 
//Default constructor--------------------- 
Sphere::Sphere(){ 
    d1 = 1; 
    d2 = 1; 
    d3 = 1; 
} 
//Regular constructor--------------------- 
Sphere::Sphere(double dim) : { 
    d1 = dim; 
    d2 = dim; 
    d3 = dim; 
} 
//Sphere area 
double Sphere::getArea(){ 
    area = 4 * PI * pow(d1, 2); 
    return area; 
} 
//Sphere volume 
double Sphere::getVolume(){ 
    volume = (4/3) * PI * pow(d1, 3); 
    return volume; 
} 
//Default constructor--------------------- 
Cube::Cube(){ 
    d1 = 1; 
    d2 = 1; 
    d3 = 1; 
} 
//Regular constructor--------------------- 
Cube::Cube(double dim){ 
    d1 = dim; 
    d2 = dim; 
    d3 = dim; 
} 
//Cube area 
double Cube::getArea(){ 
    area = pow(d1, 2); 
    return area; 
} 
//Cube Volume 
double Cube::getVolume(){ 
    volume = pow(d1, 3); 
    return volume; 
} 
//Default constructor--------------------- 
Tetrahedron::Tetrahedron(){ 
    d1 = 1; 
    d2 = 1; 
    d3 = 1; 
} 
//Regular constructor--------------------- 
Tetrahedron::Tetrahedron(double dim){ 
    d1 = dim; 
    d2 = dim; 
    d3 = dim; 
} 
//tetrahedron area 
double Tetrahedron::getArea(){ 
    area = sqrt(3) * pow(d1, 2); 
    return area; 
} 
//tetrahedron volume 
double Tetrahedron::getVolume(){ 
    volume = pow(d1, 3)/(6 * sqrt(2)); 
    return volume; 
} 

-

Ben senin Şekli sınıfına toString yöntemi gibi bir şey eklemek ve sevdiği kalıtsal sınıflarında geçersiz denemek için önermek
/--------------------------------------------------------- 
#include <stdlib.h> 
#include <cmath.h> 

#include "shape.h" //header file 

using namespace std; 

int main() { 
//Pointer Array-------------------------------------------- 
    Shape* arr[6]; 
//Assign Shape Dimensions and to Array 
    Circle cir(2); //declares value for circle ~ cir is var name 
     arr[0] = &cir; //assigns cir var to array position 0 
    Square sqr(3); 
     arr[1] = &sqr; 
    Triangle tri(4, 2); 
     arr[2] = &tri; 
    Sphere sph(5); 
     arr[3] = &sph; 
    Cube cb(6); 
     arr[4] = &cb; 
    Tetrahedron trhd(7); 
     arr[5] = &trhd; 
//Loop each index of array and perform calculation 
    for (int i = 0; i < 6; ++i) 
    { 
     cout << "" 
    } 
} 
+0

Kodunuz derleme değil, sahip olduğu birçok hata. –

+0

Bir 'isThreeDimensional' üye işlevi ekleyebilirsiniz. Veya 1D veya 4D şekillerine sahip olmayı da beklerseniz, getDimensions'ı. – immibis

+0

2B ve 3B şekilleri aynı dizide tutmaya neden ihtiyaç duyuyorsunuz? –

cevap

0

:

Class Shape{ 
... 
public: 
std::string toString(); 
... 
} 

I alt sınıflar mplement ve geçersiz:

std::string Shape::toString() 
{ 
    return "This is a simple shape"; 
} 

std::string Cube::toString() 
{ 
    return "Cube"; 
} 

... 

polimorfizmi gücü sayesinde, sen for döngüsü sadece çağırarak nesne adını alacak:

cout << arr[i].toString() << ... 
+0

Nesnenin adını yapıcıya parametrelerle birlikte koymalı mıyım yoksa ayrı tutmalı mıyım ve tostring() yöntemini kullanarak bir yöntem mi kullanmalıyım? @Pooya – Bigboy6

+0

@ Bigboy6 Hangi mekanizmayı kullanmak istediğiniz, Shape sınıfına bir işlev (toString veya getName) bildirmeniz ve daha düşük sınıflarda geçersiz kılmanız gerekir, böylece polimorfizm kullanabilirsiniz – Pooya