c ++在类中创建对象

时间:2013-06-16 21:25:49

标签: c++ class object virtual

我创建了2个类。一个名为Shape,它是一个虚拟类。另一个名为Circle(我打算创建更多像:三角形,方形......)。我想找到圆形区域对象,但这并不重要。这是我的问题。当我想创建这样的对象时:

vector<Shape *> mStack;
Shape *newShape = NULL;
newShape = new Circle(10.6);
mStack.push_back(newShape);

我可以在主文件中创建它而没有任何问题。但是当我尝试在“Shape”类中创建它的函数时..就像这样:

void Shape::Create()
{
    Shape *newShape = NULL;
    newShape = new Circle(10.6);
    mStack.push_back(newShape);
}

我收到以下错误:语法错误:标识符'Circle'

......这是我的课程。

#pragma once
#include <vector>

using namespace std;

class Shape
{

private:
    vector<Shape *> mStack;
public:
    Shape();
    ~Shape(void);

    virtual double Circle_area() = 0;   


};


*********************************************************

#pragma once
#include "Shape.h"

class Circle : public Shape
{
private:
    double m_r;
public:
    Circle();
    Circle(double r);
    ~Circle(void);

    double Create();
    double Circle_area();
};

这里的问题在哪里?如何在父类中创建对象?我希望你明白我想说的话。谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

您的设计现在不合适。通过适当的设计,您的形状可以作为真实圆圈或矩形的abstract classbase class。如果那时你的设计将是。,

enter image description here

main()中你可以维护一个不会产生问题的形状列表vector<Shape *> mStack;但您不得创建circle or rectangle形状。在我看来,这是一个错误的设计。

答案 1 :(得分:0)

你的基类不仅仅是奇怪的。

  • 基类应具有虚拟析构函数
  • 拥有自己的集合是可疑的过度使用(你可能在层次结构中有一个CompositeShape ......)
  • 它有一个名为子类的函数。 (可以是shape_area()或只是area())

你的实现问题也来自于此:如果集合没有形状,那么create就不想填充它,问题也就消失了。

根据提供的信息,不清楚创意的内容应该去哪里,可能是应用,或者可能是某些特定的复杂形状 - 这些可能只包含所有必需的标题。