Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从数组访问对象名称_C++_Arrays_Object_For Loop - Fatal编程技术网

C++ 从数组访问对象名称

C++ 从数组访问对象名称,c++,arrays,object,for-loop,C++,Arrays,Object,For Loop,使用继承类,我希望计算2d形状的面积以及3d形状的面积和体积。我现在需要访问数组来确定形状,然后确定是计算形状的面积还是体积。最终目标是循环并提供输出,表示形状、区域和/或体积的名称。如何访问数组的对象名称?谢谢 /--------------------------------------------------------- #ifndef SHAPE_H #define SHAPE_H const double PI = 3.14159265359; //Base Class------

使用继承类,我希望计算2d形状的面积以及3d形状的面积和体积。我现在需要访问数组来确定形状,然后确定是计算形状的面积还是体积。最终目标是循环并提供输出,表示形状、区域和/或体积的名称。如何访问数组的对象名称?谢谢

/---------------------------------------------------------
#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();
};
--

//---------------------------------------------------------
#包括
#包括
#包括“shape.h”//头文件
使用名称空间std;
//----------------------------------------------
//默认构造函数
形状::形状():尺寸(0)、面积(0)、体积(0){}
//正则构造函数
形状::形状(int d):{
尺寸=d;
}
//函数getDimensions
双形::getDimensions(){
返回维度;
}
//二维形状-----------------------------------
//默认构造函数--------------------
圆::圆(){
d1=1;
}
//正则构造函数--------------------
圆::圆(双r){
d1=r;
}
//圆形区域
双圆::getArea(){
面积=π*功率(d1,2);
返回区;
}
//默认构造函数--------------------
Square::Square(){
d1=1;
d2=1;
}
//正则构造函数--------------------
方形::方形(双尺寸){
d1=dim;
d2=昏暗;
}
//广场面积
双正方形::getArea(){
面积=功率(d1,2);
返回区;
}
//默认构造函数--------------------
三角形::三角形(){
d1=1;
d2=1;
}
//正则构造函数--------------------
三角形::三角形(双尺寸,双尺寸2){
d1=dim;
d2=dim2;
}
//三角区
双三角形::getArea(){
面积=(d1*d2)/2;
}
//三维形状-----------------------------------
//默认构造函数---------------------
球体::球体(){
d1=1;
d2=1;
d3=1;
}
//正则构造函数---------------------
球体::球体(双尺寸):{
d1=dim;
d2=昏暗;
d3=暗;
}
//球面面积
双球体::getArea(){
面积=4*PI*pow(d1,2);
返回区;
}
//球体体积
双球体::getVolume(){
体积=(4/3)*π*功率(d1,3);
返回量;
}
//默认构造函数---------------------
多维数据集::多维数据集(){
d1=1;
d2=1;
d3=1;
}
//正则构造函数---------------------
多维数据集::多维数据集(双尺寸){
d1=dim;
d2=昏暗;
d3=暗;
}
//立方体面积
双多维数据集::getArea(){
面积=功率(d1,2);
返回区;
}
//立方体体积
双多维数据集::getVolume(){
体积=功率(d1,3);
返回量;
}
//默认构造函数---------------------
四面体::四面体(){
d1=1;
d2=1;
d3=1;
}
//正则构造函数---------------------
四面体::四面体(双尺寸){
d1=dim;
d2=昏暗;
d3=暗;
}
//四面体面积
双四面体::getArea(){
面积=平方米(3)*功率(d1,2);
返回区;
}
//四面体体积
双四面体::getVolume(){
体积=功率(d1,3)/(6*sqrt(2));
返回量;
}
--

/---------------------------------------------------------
#包括
#包括
#包括“shape.h”//头文件
使用名称空间std;
int main(){
//指针数组--------------------------------------------
形状*arr[6];
//为阵列指定形状和尺寸
Circle cir(2);//声明Circle~cir的值是var name
arr[0]=○//将cir var分配给数组位置0
平方米(3);
arr[1]=&sqr;
三角形三(4,2);
arr[2]=&tri;
球形sph(5);
arr[3]=&sph;
立方cb(6);
arr[4]=&cb;
四面体trhd(7);
arr[5]=&trhd;
//循环数组的每个索引并执行计算
对于(int i=0;i<6;++i)
{

我建议在Shape类中添加类似于
toString
的方法,并尝试在继承的类中重写它,如:

Class Shape{
...
public:
std::string toString();
...
}
在子类中实现并重写它:

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

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

...
通过多态性的强大功能,您只需调用以下命令即可在for循环中获得对象名:

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

cout您的代码没有编译,它有很多错误。您可以添加
isThreeDimensional
成员函数。或者
getDimensions
,如果您希望也有1D或4D形状。为什么需要将2D和3D形状保留在同一数组中?我应该将对象的名称与参数一起放在构造函数中还是保留它将某个对象分离并使用tostring()或将其命名为getName()作为方法@Pooya@Bigboy6无论您想使用哪种机制,都需要向Shape类声明一个函数(toString或getName),并在较低的类中重写它,以便使用多态性
std::string Shape::toString()
{
   return "This is a simple shape";
}

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

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