7-2 点到原点的距离(继承)

第三个无法输出正确答案是为什么呀

#include
#include
using namespace std;
class Point_1D
{ protected:

    float x;//1D 点的x坐标

  public:
    Point_1D(int x):x(x){
 }
    Point_1D(float p = 0.0)
    {x=p;}

   void distance( )
    {   
     cout<<"Distance from Point"<" "<<"to original point is"<<" "<<sqrt(x*x)<class Point_2D:public Point_1D
{ protected:

    float y;//1D 点的x坐标

  public:
    Point_2D(int x,int y): Point_1D(x),y(y){
 }
    

    void distance( )
    {   
     cout<<"Distance from Point"<<"("<","<")"<<" "<<"to original point is"<<" "<<sqrt(x*x+y*y)<class Point_3D:public Point_2D
{ protected:

    float z;//1D 点的x坐标

  public:
   
       Point_3D(int x,int y,int z):Point_2D(x,y){z=z;}
 
    

    void distance( )
    {   
     cout<<"Distance from Point"<<"("<","<","<")"<<" "<<"to original point is"<<" "<<sqrt(x*x+y*y+z*z)<int main()
{   int x,y,z,n;
    
    while(1)
{
     cin>>n;
     if(n==0)
      break;
 
  if(n==1)
  {  cin>>x;
    Point_1D d1(x);
    d1.distance(); 
  }
  else if(n==2)
  {    cin>>x>>y;
       Point_2D d2(x,y);
        d2.distance();
  }
  else
   {
    cin>>x>>y>>z;
    Point_3D d3(x,y,z);
    d3.distance();
   }
 }
 return 0;
 } 

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/437227973186121.png "#left")


Point_3D(int x, int y, int z) : Point_2D(x, y), z(z) {
}