下面程序为何编译不过
[code=C/C++][/code]
#include <iostream>
using namespace std;
class Point2d
{
public:
Point2d(float vx=0.0,float vy=0.0):_x(vx),_y(vy){}
float x(){return _x;}
void x(float val){_x=val;}
float y(){return _y;}
void y(float val){_y=val;}
virtual float z(){return 0.0;}
virtual void z(float){}
virtual void operator+=(const Point2d& rhs)
{
_x += rhs.x();
_y += rhs.y();
}
protected:
float _x;
float _y;
};
class Point3d:public Point2d
{
public:
Point3d(float vx=0.0,float vy=0.0,float vz=0.0):Point2d(vx,vy),_z(vz){}
void operator+=(const Point2d& val)
{
Point2d::operator +=(val);
_z+=val.z();
}
protected:
float _z;
};
int main()
{
Point2d p2d(2.1,3.1);
Point3d p3d(2.1,3.1,4.1);
p3d+=p2d;
cout<<p3d.x()<<"\t"<<p3d.y()<<"\t"<<p3d.z()<<endl;
return 0;
}
[解决办法]
#include//少头文件 <iostream>class Point2d{public:Point2d(float vx=0.0,float vy=0.0):_x(vx),_y(vy){}float x(){return _x;}void x(float val){_x=val;}float y(){return _y;}void y(float val){_y=val;}virtual float z(){return 0.0;}virtual void z(float){}void operator+=(const Point2d& rhs){_x += rhs._x;//rhs.x()???这样写不对吧_y += rhs._y;}protected:float _x;float _y;};class Point3d:public Point2d{public:Point3d(float vx=0.0,float vy=0.0,float vz=0.0):Point2d(vx,vy),_z(vz){}void operator+=(const Point2d& val){Point2d::operator +=(val);_z+=0;}virtual float z(){return _z;}//你这个函数没有重写protected:float _z;};int main(){Point2d p2d(2.1,3.1);Point3d p3d(2.1,3.1,4.1);p3d+=p2d;std::cout<<p3d.x()<<"\t"<<p3d.y()<<"\t"<<p3d.z()<<std::endl;return 0;}
[解决办法]
void operator+=(const Point2d& val){Point2d::operator +=(val);_z+=val.z();}
[解决办法]
#include <iostream>class Point2d{public:Point2d(float vx=0.0,float vy=0.0):_x(vx),_y(vy){}float x(){return _x;}void x(float val){_x=val;}float y(){return _y;}void y(float val){_y=val;}virtual float z(){return 0.0;}virtual void z(float){}void operator+=(const Point2d& rhs){_x += rhs._x;////////////////////改_y += rhs._y;///////////////////改}protected:float _x;float _y;};class Point3d:public Point2d{public:Point3d(float vx=0.0,float vy=0.0,float vz=0.0):Point2d(vx,vy),_z(vz){}void operator+=(const Point2d& val){Point2d::operator +=(val);_z+=0;/////////////////////改}virtual float z(){return _z;}////////////////////改protected:float _z;};int main(){Point2d p2d(2.1,3.1);Point3d p3d(2.1,3.1,4.1);p3d+=p2d;std::cout<<p3d.x()<<"\t"<<p3d.y()<<"\t"<<p3d.z()<<std::endl;return 0;}