C++ 给定一个有不同图形的向量,找出有多少是圆,有多少是正方形
所以我举了一个例子:C++ 给定一个有不同图形的向量,找出有多少是圆,有多少是正方形,c++,C++,所以我举了一个例子: class figures {}; class square:public figures {}; class circle : public figures {}; ..... int main() { geometric figures* *p; p[0]=new Circle; p[1]=new Square; return 0; }; 等等。我的问
class figures
{};
class square:public figures
{};
class circle : public figures
{};
.....
int main()
{
geometric figures* *p;
p[0]=new Circle;
p[1]=new Square;
return 0;
};
等等。我的问题是,如果所有指针都是几何图形类型,我以后如何才能找出几何图形数组中有多少个圆或正方形?您可以使用
动态\u cast
:
std::vector<geometric_figures *> shapes;
int num_circles = 0;
int num_squares = 0;
for (geometric_figures * shape : shapes)
{
if(dynamic_cast<circle*>(shape))
num_circles++;
if(dynamic_cast<square*>)(shape))
num_squares++;
}
std::向量形状;
int num_圆圈=0;
int num_squares=0;
用于(几何图形*形状:形状)
{
if(动态_铸造(形状))
num_圆圈++;
if(动态_铸造)(形状))
num_squares++;
}
您还可以添加一个
enum
以对应于形状的类型,并添加一个GetType()
方法,该方法返回enum您的类中可以有一个enum
class geometric_figures
{
public:
enum shape {eSquare, eCircle};
virtual shape GetShapeType() const = 0;
};
class square : public geometric_figures
{
public:
shape GetShapeType() const override { return eSquare; }
};
class circle : public geometric_figures
{
public:
shape GetShapeType() const override { return eCircle; }
};
然后你可以用
#include您可以使用动态强制转换。例如:
// Returns true if 'a' is of type 'square'
bool isSquare(Figure* a)
{
return dynamic_cast<Square*>(a) != nullptr;
}
// Returns true if 'a' is of type 'circle'
bool isCircle(Figure* a)
{
return dynamic_cast<Circle*>(a) != nullptr;
}
int main()
{
Figure *p = new Figure[5];
p[0] = new Circle;
p[1] = new Circle;
p[2] = new Square;
p[3] = new Square;
p[4] = new Square;
int circleCnt = 0;
int squareCnt = 0;
for(int i = 0; i < 5; i++)
{
if(isCircle(p[i]))
{
circleCnt++;
}
if(isSquare(p[i]))
{
squareCnt++;
}
}
cout << "Number of circles: " << circleCnt << endl;
cout << "Number of squares: " << squareCnt << endl;
}
//如果“a”的类型为“square”,则返回true
布尔·伊斯夸尔(图*a)
{
返回动态_cast(a)!=nullptr;
}
//如果“a”的类型为“circle”,则返回true
布尔isCircle(图*a)
{
返回动态_cast(a)!=nullptr;
}
int main()
{
图*p=新图[5];
p[0]=新圆;
p[1]=新圆;
p[2]=新正方形;
p[3]=新广场;
p[4]=新广场;
int circleCnt=0;
int squareCnt=0;
对于(int i=0;i<5;i++)
{
if(isCircle(p[i]))
{
circleCnt++;
}
if(平方(p[i]))
{
squareCnt++;
}
}
这里可能有多个问题…标识符名称中不能有空格(几何图形),并且,您从未分配数组“p”。也许您正在寻找std::vector?为什么不继续运行总计?谢谢!我知道这是低效的,但实际上分配是查看图形向量中有多少圆和正方形,而不在我将其放入向量时对其进行计数。类似于:给定一个具有不同图形的向量让我们看看有多少是圆。
// Returns true if 'a' is of type 'square'
bool isSquare(Figure* a)
{
return dynamic_cast<Square*>(a) != nullptr;
}
// Returns true if 'a' is of type 'circle'
bool isCircle(Figure* a)
{
return dynamic_cast<Circle*>(a) != nullptr;
}
int main()
{
Figure *p = new Figure[5];
p[0] = new Circle;
p[1] = new Circle;
p[2] = new Square;
p[3] = new Square;
p[4] = new Square;
int circleCnt = 0;
int squareCnt = 0;
for(int i = 0; i < 5; i++)
{
if(isCircle(p[i]))
{
circleCnt++;
}
if(isSquare(p[i]))
{
squareCnt++;
}
}
cout << "Number of circles: " << circleCnt << endl;
cout << "Number of squares: " << squareCnt << endl;
}