这是我的代码的问题
我有一个父类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;
}
}
所以在main.cpp,我做到了
int main()
{
Shape *point[5];
Point vertic`lePoint;
Square *cro = new Square();
// some codes in between
// now i prompt for verticle point
shape[0] = squr;
//assuming myShape & myType is some string value
shape[0]->setName(myShape);
shape[0].setType(myType);
//here i will be prompt to key in 4 times of X & y Ordinate of the verticle point
shape[0]->setVerticlePoint();
//Now the issue is i need to retrieve back my verticle point that i store in shape[0].
//here no issue
cout << "Get Name: " << shape[0]->getName() << endl;
cout << "Get Data:" << shape[0]->getType() << endl;
//the top 2 works
//this is the issue
verticlePoint = shape[0]->getVerticlePoint();
cout << sizeof(verticlePoint);
//it output as size 8 , no matter which shape i use, i got other shapes with different verticle point.
return 0;
}
问题是:
我该如何检索
verticlePoint[array]
(例如,Square为verticlePoint[4]
,我如何将Point检索到主类中的变量中,然后使用for循环调用x,y
的shape[0]
,以便将verticlePoint[0]
转换为verticlePoint[4]
感谢所有帮助!
最佳答案
显然,您希望根据形状返回不同数量的点。为此,您可以使用std::vector<Point>
作为返回类型...,例如:
class Shape
{
private:
string name;
public:
void setName(string);
string getName();
virtual void setVerticlePoint() { };
virtual std::vector<Point> getVerticlePoint();
};
然后以正方形为例,您将返回一个4点的 vector ...
std::vector<Point> Square::getVerticlePoint()
{
return std::vector<Point>(verticlePoint, verticlePoint+4);
}