/* 程序中定义Point类。请在横线处补充程序以使程序完整, 使该程序执行结果为:The distance is 3.60555 */ #include<iostream> #include<cmath> using namespace std; class Point{ private: float x,y; public: //请选中下方横线,补充代码 Point(float x1,float y1):_________①________{} float getx( ){return x;} float gety( ){return y;} //请选中下方横线,补充代码 ___________②_____________; }; float dis(Point &a,Point &b) { float dx=a.x-b.x; float dy=a.y-b.y; return sqrt(dx*dx+dy*dy); } int main( ) { Point p1(6,7),p2(3,5); float d=dis(p1,p2); cout<<"The distance is "<<d<<endl; return 0; }
时间: 2024-03-31 22:36:52 浏览: 15
#include<iostream>
#include<cmath>
using namespace std;
class Point{
private:
float x,y;
public:
Point(float x1,float y1):x(x1),y(y1){} //①构造函数初始化
float getx( ){return x;}
float gety( ){return y;}
friend float dis(Point &a,Point &b); //②声明友元函数
};
float dis(Point &a,Point &b) {
float dx=a.x-b.x;
float dy=a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
int main( ) {
Point p1(6,7),p2(3,5);
float d=dis(p1,p2);
cout<<"The distance is "<<d<<endl;
return 0;
}
相关问题
1.编写程序定义类Point,有数据成员x,y为其定义友元函数实现重载“+”。
以下是Point类的定义和重载"+"运算符的实现:
```c++
#include <iostream>
using namespace std;
class Point {
private:
int x, y;
public:
Point(int _x = 0, int _y = 0) { x = _x; y = _y; }
friend Point operator+(const Point& p1, const Point& p2);
void print() { cout << "(" << x << "," << y << ")" << endl; }
};
Point operator+(const Point& p1, const Point& p2) {
Point res;
res.x = p1.x + p2.x;
res.y = p1.y + p2.y;
return res;
}
int main() {
Point p1(1, 2), p2(3, 4);
Point p3 = p1 + p2;
p3.print(); // 输出 (4,6)
return 0;
}
```
在上面的代码中,Point类有两个私有数据成员x和y,以及一个公有的构造函数和一个公有的打印函数。我们使用了友元函数来实现重载"+"运算符,友元函数可以访问Point类的私有成员。在main函数中,我们创建了两个Point对象p1和p2,并将它们相加得到p3,最后调用p3的打印函数输出结果。
以示例性的程序说明C++中对象、类、继承、聚合、多态、消息在程序中如何实现
以下是一个简单的示例程序,演示了C语言中对象、类、继承、聚合、多态和消息的实现:
```
#include <stdio.h>
// 定义一个基类
typedef struct {
int x;
int y;
} Point;
// 定义一个派生类
typedef struct {
Point base; // 继承Point类
int z;
} Point3D;
// 定义一个方法,用于打印Point对象
void print_point(Point *p) {
printf("(%d, %d)\n", p->x, p->y);
}
// 定义一个方法,用于打印Point3D对象
void print_point3D(Point3D *p) {
printf("(%d, %d, %d)\n", p->base.x, p->base.y, p->z);
}
int main() {
// 创建一个Point对象并调用print_point方法
Point p = {1, 2};
print_point(&p);
// 创建一个Point3D对象并调用print_point3D方法
Point3D p3d = {{3, 4}, 5};
print_point3D(&p3d);
// 将Point3D对象赋值给Point指针,实现多态
Point *p_ptr = (Point *)&p3d;
print_point(p_ptr);
return 0;
}
```
在这个示例程序中,我们定义了一个基类Point和一个派生类Point3D,Point3D类继承了Point类。我们还定义了两个方法print_point和print_point3D,用于打印Point和Point3D对象的坐标。
在main函数中,我们创建了一个Point对象p和一个Point3D对象p3d,并分别调用了print_point和print_point3D方法打印它们的坐标。注意到我们可以将Point3D对象赋值给Point指针,实现了多态,即同一个指针可以指向不同的对象。
这个示例程序还演示了对象的聚合,即Point3D对象中包含了一个Point对象作为基类。最后,我们在程序中发送了消息,即调用了print_point和print_point3D方法,这是一种对象之间通信的方式。