Tôi là newbie đang bắt đầu tự học lập trình qua đọc sách là chủ yếu. Hiện tại đang gặp vấn đề ở phần ví dụ của Lớp cơ sở trừu tượng, nhờ các Tiền Bối chỉ bảo dùm.
#include <iostream>
#include <math.h>
using namespace std;
class Point
{
protected:
float x, y;
public:
float& getX(void);
float& getY(void);
virtual float KhoangCach(void*)=0;
};
float& Point::getX(void)
{
return x;
}
float& Point::getY(void)
{
return y;
}
class Point2D:public Point
{
public:
float KhoangCach(void*);
};
class Point3D:public Point
{
float z;
public:
float& getZ(void);
float KhoangCach(void*);
};
float Point2D::KhoangCach(void* p)
{
Point2D* q = (Point2D*)(p);
return sqrt(pow(q->x-x,2)+pow(q->y-y,2));
}
float& Point3D::getZ(void)
{
return z;
}
float Point3D::KhoangCach(void* p)
{
Point3D* q = (Point3D*)(p);
return sqrt(pow(q->x-x,2)+pow(q->y-y,2)+pow(q->z-z,2));
}
int main()
{
Point2D v2;
Point2D u2;
cout<<".::-----Nhap toa do cho hai Point2D u va v-----::."<<endl;
cout<<"+ Toa do u:"<<endl;
cin>>v2.getX();
cin>>v2.getY();
cout<<"+ Toa do v:"<<endl;
cin>>u2.getX();
cin>>u2.getY();
Point* u = &v2;
Point* v = &u2;
cout<<"D(u,v) = "<<u->KhoangCach(v);
Point3D v3;
Point3D u3;
cout<<endl<<".::-----Nhap toa do cho hai Point3D u va v-----::."<<endl;
cout<<"+ Toa do u:"<<endl;
cin>>v3.getX();
cin>>v3.getY();
cin>>v3.getZ();
cout<<"+ Toa do v:"<<endl;
cin>>u3.getX();
cin>>u3.getY();
cin>>u3.getZ();
Point* p = &v3;
Point* q = &u3;
cout<<"D(u3,v3) = "<<p->KhoangCach(q);
cout<<endl;
return 0;
}
Phần tính khoảng cách của lớp Point2D và Point3D khó hiểu quá. Tại sao phải đặt Point2D *q=(Point2D*)(p)
để làm gì? q->x
: là x của tham số nào? Và -x
: là trừ x của tham số nào? Rối quá.
Mong được gỡ rối dùm.
Cảm ơn.