Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++_Inheritance_Struct - Fatal编程技术网

C++ 从子类获取结构并在主类中使用

C++ 从子类获取结构并在主类中使用,c++,inheritance,struct,C++,Inheritance,Struct,这里是我的代码的问题 我得到了一个父类Shape和一个子类Square struct Point { int x,y; }; class Shape { private: string name; public: void setName(string); string getName(); virtual void setVerticlePoint() { }; virtual Point getVerticlePoint(); }; 下面

这里是我的代码的问题

我得到了一个父类
Shape
和一个子类
Square

struct Point
{
    int x,y;
};

class Shape
{
private:
    string name;

public:
    void setName(string);
    string getName();
    virtual void setVerticlePoint() { };
    virtual Point getVerticlePoint();
};
下面是Square.cpp

class Square: public Shape
{
private:
    Point verticlePoint[4];

public:
    int noOfVerticles() const { return 5; }
    void setVerticlePoint();
    Point getVerticlePoint();
};

void Square::setVerticlePoint()
{
    int xData,yData;

    for(int i=0; i<4; i++)
    {
        cout << "Please enter x-ordinate of pt." << i << " :";
        cin > xData;
        cout << "Please enter y-ordinate of pt." << i << " :";
        cin >> yData;
        verticlePoint[i]->x = xData;
        verticlePoint[i]->y = yData;
    }
}
类方形:公共形状
{
私人:
点垂直点[4];
公众:
int noOfVerticles()常量{return 5;}
void setVerticlePoint();
Point getVerticlePoint();
};
void Square::setVerticlePoint()
{
int扩展数据,yData;
对于(int i=0;isetVerticlePoint();
//现在的问题是,我需要恢复我存储在形状[0]中的垂直点。
//这里没有问题

cout显然,您希望根据形状返回不同数量的点。为此,您可以使用
std::vector
作为返回类型…例如:

class Shape
{
private:
    string name;

public:
    void setName(string);
    string getName();
    virtual void setVerticlePoint() { };
    virtual std::vector<Point> getVerticlePoint();
};
类形状
{
私人:
字符串名;
公众:
void setName(字符串);
字符串getName();
虚拟void setVerticlePoint(){};
虚拟std::vector getVerticlePoint();
};
然后在正方形中,例如,你将返回一个4点的向量

std::vector<Point> Square::getVerticlePoint()
{
    return std::vector<Point>(verticlePoint, verticlePoint+4);
}
std::vector Square::getVerticlePoint()
{
返回标准::向量(垂直点,垂直点+4);
}

显然,您希望根据形状返回不同数量的点。为此,您可以使用
std::vector
作为返回类型…例如:

class Shape
{
private:
    string name;

public:
    void setName(string);
    string getName();
    virtual void setVerticlePoint() { };
    virtual std::vector<Point> getVerticlePoint();
};
类形状
{
私人:
字符串名;
公众:
void setName(字符串);
字符串getName();
虚拟void setVerticlePoint(){};
虚拟std::vector getVerticlePoint();
};
然后在正方形中,例如,你将返回一个4点的向量

std::vector<Point> Square::getVerticlePoint()
{
    return std::vector<Point>(verticlePoint, verticlePoint+4);
}
std::vector Square::getVerticlePoint()
{
返回标准::向量(垂直点,垂直点+4);
}

“垂直”不是一个词。“垂直”是指上下方向或位置。但我怀疑你真的是指“顶点”,意思是一个角或节点(复数“顶点”)。“垂直”不是一个词。“垂直”是指上下方向或位置。但我怀疑你真的是指“顶点”,意思是一个角或节点(复数“顶点”).但我的verticlePoint是一个点verticlePoint[4],一个数组,返回的向量会导致issue@user1578897:
std::vector
有一个接受两个指针的构造函数:一个指向第一个元素的指针和一个指向“超过最后一个”的指针元素。在示例中,我使用了
verticlePoint
verticlePoint+4
,因为成员是一个数组,在这种情况下,数组“degreats”指向指向第一个元素的指针,因此代码正确地创建了一个复制数组内容的
std::vector
。但我的verticlePoint是一个点verticlePoint[4],一个数组,将返回向量issue@user1578897:
std::vector
有一个构造函数,它接受两个指针:一个指向第一个元素的指针和一个指向“超过最后一个”元素的指针。在示例中,我使用了
verticlePoint
verticlePoint+4
,因为成员是一个数组,在这个上下文中是数组“十年”指向指向第一个元素的指针,以便代码正确创建复制数组内容的
std::vector