Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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++ 如何分配类内存? #包括 #包括 使用名称空间std; 枚举颜色{红色、蓝色、黄色}; 阶级形态{ 颜色线条颜色; 公众: Color getLineColor()常量{return lineColor;} 虚拟形状*克隆()常量=0; 虚空打印()常量=0; 虚拟浮点getLength()常量=0; }; 类点{ int x; int-y; 公众: 点(常数int_x,常数int_y){x=x;y=y;} }; 类闭合形状:公共形状{ 公众: 虚拟形状*克隆()常量=0; 虚空打印()常量=0; 虚拟浮点getLength()常量=0; }; 类多边形:公共闭合形状{ }; 类三角形:公共多边形{ p1点; p2点; p3点; 公众: 三角形(常数点和常数p1、常数点和常数p2、常数点和常数p3) :p1(_p1),p2(_p2),p3(_p3){ }; 类矩形:公共多边形{ p1点; p2点; p3点; p4点; 公众: 虚拟形状*克隆()常量=0; 虚空打印()常量=0; 虚拟浮点getLength()常量=0; 矩形(常数点和常数p1、常数点和常数p2、常数点和常数p3、常数点和常数p4) :p1(_p1),p2(_p2),p3(_p3),p4(_p4){} }; 类闭合形状列表{ 向量v; 公众: void addShape(矩形和常量r){ v、 向后推(&r); } 空心形状(三角形和常数t){ v、 推回(&t); } }; int main(){ 点p1(0,0)、p2(0,10)、p3(20,20)、p4(20,30); 闭合形状*常数r=新矩形(p1、p2、p3、p4); 闭合形状*常数t=新三角形(p1、p2、p3); 关闭的形状列表{}; 列表。addShape(r); 列表。addShape(t); 删除r; 删除t; list.print(); cout_C++ - Fatal编程技术网

C++ 如何分配类内存? #包括 #包括 使用名称空间std; 枚举颜色{红色、蓝色、黄色}; 阶级形态{ 颜色线条颜色; 公众: Color getLineColor()常量{return lineColor;} 虚拟形状*克隆()常量=0; 虚空打印()常量=0; 虚拟浮点getLength()常量=0; }; 类点{ int x; int-y; 公众: 点(常数int_x,常数int_y){x=x;y=y;} }; 类闭合形状:公共形状{ 公众: 虚拟形状*克隆()常量=0; 虚空打印()常量=0; 虚拟浮点getLength()常量=0; }; 类多边形:公共闭合形状{ }; 类三角形:公共多边形{ p1点; p2点; p3点; 公众: 三角形(常数点和常数p1、常数点和常数p2、常数点和常数p3) :p1(_p1),p2(_p2),p3(_p3){ }; 类矩形:公共多边形{ p1点; p2点; p3点; p4点; 公众: 虚拟形状*克隆()常量=0; 虚空打印()常量=0; 虚拟浮点getLength()常量=0; 矩形(常数点和常数p1、常数点和常数p2、常数点和常数p3、常数点和常数p4) :p1(_p1),p2(_p2),p3(_p3),p4(_p4){} }; 类闭合形状列表{ 向量v; 公众: void addShape(矩形和常量r){ v、 向后推(&r); } 空心形状(三角形和常数t){ v、 推回(&t); } }; int main(){ 点p1(0,0)、p2(0,10)、p3(20,20)、p4(20,30); 闭合形状*常数r=新矩形(p1、p2、p3、p4); 闭合形状*常数t=新三角形(p1、p2、p3); 关闭的形状列表{}; 列表。addShape(r); 列表。addShape(t); 删除r; 删除t; list.print(); cout

C++ 如何分配类内存? #包括 #包括 使用名称空间std; 枚举颜色{红色、蓝色、黄色}; 阶级形态{ 颜色线条颜色; 公众: Color getLineColor()常量{return lineColor;} 虚拟形状*克隆()常量=0; 虚空打印()常量=0; 虚拟浮点getLength()常量=0; }; 类点{ int x; int-y; 公众: 点(常数int_x,常数int_y){x=x;y=y;} }; 类闭合形状:公共形状{ 公众: 虚拟形状*克隆()常量=0; 虚空打印()常量=0; 虚拟浮点getLength()常量=0; }; 类多边形:公共闭合形状{ }; 类三角形:公共多边形{ p1点; p2点; p3点; 公众: 三角形(常数点和常数p1、常数点和常数p2、常数点和常数p3) :p1(_p1),p2(_p2),p3(_p3){ }; 类矩形:公共多边形{ p1点; p2点; p3点; p4点; 公众: 虚拟形状*克隆()常量=0; 虚空打印()常量=0; 虚拟浮点getLength()常量=0; 矩形(常数点和常数p1、常数点和常数p2、常数点和常数p3、常数点和常数p4) :p1(_p1),p2(_p2),p3(_p3),p4(_p4){} }; 类闭合形状列表{ 向量v; 公众: void addShape(矩形和常量r){ v、 向后推(&r); } 空心形状(三角形和常数t){ v、 推回(&t); } }; int main(){ 点p1(0,0)、p2(0,10)、p3(20,20)、p4(20,30); 闭合形状*常数r=新矩形(p1、p2、p3、p4); 闭合形状*常数t=新三角形(p1、p2、p3); 关闭的形状列表{}; 列表。addShape(r); 列表。addShape(t); 删除r; 删除t; list.print(); cout,c++,C++,在使用叮当声构建时,我看到了这些与矩形相关的错误: #include <iostream> #include <vector> using namespace std; enum Color { RED, BLUE, YELLOW }; class Shape { Color lineColor; public: Color getLineColor() const { return lineColor; } virtual Shape* cl

在使用叮当声构建时,我看到了这些与矩形相关的错误:

#include <iostream>
#include <vector>
using namespace std;

enum Color { RED, BLUE, YELLOW };

class Shape {
    Color lineColor;
public:
    Color getLineColor() const { return lineColor; }
    virtual Shape* clone() const = 0;
    virtual void print() const = 0;
    virtual float getLength() const = 0;
};

class Point {
    int x;
    int y;
public : 
    Point(const int _x, const int _y) { x = _x; y = _y; }
};

class ClosedShape : public Shape {
public:
    virtual Shape* clone() const = 0;
    virtual void print() const = 0;
    virtual float getLength() const = 0;
};

class Polygon : public ClosedShape {

};

class Triangle : public Polygon {
    Point p1;
    Point p2;
    Point p3;
public:
    Triangle(const Point& _p1, const Point& _p2, const Point& _p3)
        :p1(_p1), p2(_p2), p3(_p3) {}
};

class Rectangle : public Polygon {
    Point p1;
    Point p2;
    Point p3;
    Point p4;
public:
    virtual Shape* clone() const = 0;
    virtual void print() const = 0;
    virtual float getLength() const = 0;
    Rectangle(const Point& _p1, const Point& _p2, const Point& _p3, const Point& _p4)
        :p1(_p1), p2(_p2), p3(_p3), p4(_p4) {}
};

class ClosedShapeList {
    vector<Polygon*> v;
public:
    void addShape(Rectangle& const r) {
        v.push_back(&r);
    }
    void addShape(Triangle& const t) {
        v.push_back(&t);
    }
};

int main() {
    Point p1(0, 0), p2(0, 10), p3(20, 20), p4(20, 30);

    ClosedShape* const r = new Rectangle(p1, p2, p3, p4);
    ClosedShape* const t = new Triangle(p1, p2, p3);

    ClosedShapeList list{};
    list.addShape(r);
    list.addShape(t);
    delete r;
    delete t;

    list.print();
    cout << list.getTotalArea() << endl;
}
然后,您需要为
Triangle
类实现类似的函数来构建内容。不过,这里似乎还有一些其他错误:

class Rectangle : public Polygon {
...
public:
    Shape* clone() const override {
        return new Rectangle(p1, p2, p3, p4);
    }
    void print() const override {
        std::cout << "Rectangle"; // TODO: Actually print stuff
    }
    float getLength() const override {
        return 0.0; // TODO: Actually compute the length
    }
...
};

您不能创建抽象类(纯虚拟函数类)的对象。具体地说,
Rectangle
没有
clone
print
getLength
的实现,因此您不能创建它的实例。
Triangle
也是如此。
class Rectangle : public Polygon {
...
public:
    Shape* clone() const override {
        return new Rectangle(p1, p2, p3, p4);
    }
    void print() const override {
        std::cout << "Rectangle"; // TODO: Actually print stuff
    }
    float getLength() const override {
        return 0.0; // TODO: Actually compute the length
    }
...
};
    ClosedShape* const r = new Rectangle(p1, p2, p3, p4);
    ClosedShape* const t = new Triangle(p1, p2, p3);

    ClosedShapeList list{};
    // 1: addShape takes a Rectangle or Triangle reference but r and t are both ClosedShapes pointers, maybe the interface should accept a Polygon pointer or a ClosedShape pointer? You can convert child classes to parent classes, but can't (in general) convert parent classes to child class.
    list.addShape(r);
    list.addShape(t);

    // 2: Since addShape adds the pointer to the object to the vector, deleting these leaves those pointers dangling. You'll want to move these functions to the end (or maybe in the destructor of the `ClosedShapeList` class).
    delete r;
    delete t;