65,211
社区成员
发帖
与我相关
我的任务
分享class Point2d
{
public:
Point2d(int x=0, int y=0)
: _x(x), _y(y)
{
}
int x(void)
{
return _x;
}
void x(int newX)
{
_x = newX;
}
int y(void)
{
return _y;
}
void y(int newY)
{
_y = newY;
}
virtual int z(void)
{
return 0;
}
virtual void z(int newZ)
{
}
virtual void operator +=(const Point2d& rhs)
{
_x += rhs._x;
_y += rhs._y;
}
protected:
int _x;
int _y;
};
class Point3d : public Point2d
{
public:
Point3d(int x=0, int y=0, int z=0)
: Point2d(x, y), _z(z)
{
}
virtual int z(void)
{
return _z;
}
virtual void z(int newZ)
{
_z = newZ;
}
virtual void operator +=(const Point2d& rhs)
{
Point2d::operator +=(rhs);
_z += rhs.z();
/* 报如下错
error C2663: 'Point2d::z' : 2 overloads have no legal conversion for 'this' pointer
问题一:
似乎出错在重载上,但不知为什么?
*/
}
protected:
int _z;
};
int _tmain(int argc, _TCHAR* argv[])
{
Point3d pt3_1(1, 2, 3);
Point3d pt3_2(4, 5, 6);
Point2d pt2_1(1, 2);
Point2d pt2_2(3, 4);
pt2_1 += pt2_2;
pt3_1 += pt3_2;
pt2_2 += pt3_2;
return 0;
}class Point2d
{
public:
Point2d(int x=0, int y=0)
: _x(x), _y(y)
{
}
int x(void) const
{
return _x;
}
void x(int newX)
{
_x = newX;
}
int y(void) const
{
return _y;
}
void y(int newY)
{
_y = newY;
}
virtual int z(void) const
{
return 0;
}
virtual void z(int newZ)
{
}
virtual void operator +=(const Point2d& rhs)
{
_x += rhs._x;
_y += rhs._y;
}
protected:
int _x;
int _y;
};
class Point3d : public Point2d
{
public:
Point3d(int x=0, int y=0, int z=0)
: Point2d(x, y), _z(z)
{
}
virtual int z(void) const
{
return _z;
}
virtual void z(int newZ)
{
_z = newZ;
}
virtual void operator +=(const Point2d& rhs)
{
Point2d::operator +=(rhs);
_z += rhs.z();
}
protected:
int _z;
};
int _tmain(int argc, _TCHAR* argv[])
{
Point3d pt3_1(1, 2, 3);
Point3d pt3_2(4, 5, 6);
Point2d pt2_1(1, 2);
Point2d pt2_2(3, 4);
pt2_1 += pt2_2;
pt3_1 += pt3_2;
pt2_2 += pt3_2;
return 0;
}