#include <iostream> #include <cmath> class Point { private: int x; int y; static int count; // 统计点的个数 public: Point(int x = 0, int y = 0) { this->x = x; this->y = y; count++; } int getX() const { return x; } int getY() const { return y; } void display() const { std::cout << "(" << x << ", " << y << ")" << std::endl; } static void showCount() { std::cout << "There are " << count << " points." << std::endl; } Point midpoint(int x, int y) const { Point m((this->x + x) / 2, (this->y + y) / 2); return m; } friend double distance(const Point& p); }; int Point::count = 0; double distance(const Point& p) { return sqrt(p.x * p.x + p.y * p.y); } int main() { const Point p1(1, 2); const Point p2(3, 4); p1.display(); p2.display(); Point::showCount(); std::cout << "Distance from p1 to origin: " << distance(p1) << std::endl; std::cout << "Midpoint between p1 and origin: "; p1.midpoint(0, 0).display(); std::cout << "Midpoint between p1 and p2: "; p1.midpoint(p2.getX(), p2.getY()).display(); const Point* pp = &p1; pp->display(); return 0; }
时间: 2024-03-04 12:52:34 浏览: 118
这段代码定义了一个 Point 类,表示一个二维平面上的点。其中,count 是一个静态成员变量,用于记录 Point 对象的个数;getX 和 getY 是两个访问私有成员变量 x 和 y 的公有成员函数;display 是一个输出点坐标的公有成员函数;midpoint 是一个计算当前点和传入点中点坐标的公有成员函数;distance 是一个计算点到原点距离的友元函数。
在 main 函数中,创建了两个 Point 对象 p1 和 p2,并调用其成员函数 display 输出点的坐标。然后调用 Point 的静态成员函数 showCount 输出 Point 对象的个数。接着,调用 distance 函数计算 p1 到原点的距离,并输出结果;再调用 p1 的成员函数 midpoint 计算 p1 和原点的中点坐标,并输出结果;最后,使用指向常量 Point 对象的指针 pp 指向 p1,并调用 pp 的成员函数 display 输出点的坐标。
相关问题
#include <iostream>#include <cmath>using namespace std;class Point {private: int x; int y; static int count; // 统计点的个数public: Point(int x = 0, int y = 0) { this->x = x; this->y = y; count++; } int getX() { return x; } int getY() { return y; } void display() { cout << "x: " << x << ", y: " << y << endl; } Point midpoint(int x, int y) const { int midX = (this->x + x) / 2; int midY = (this->y + y) / 2; return Point(midX, midY); } static void showCount() { cout << "The count of points is: " << count << endl; } friend double distance(Point p); // 求出点到原点的距离};int Point::count = 0;double distance(Point p) { return sqrt(pow(p.x, 2) + pow(p.y, 2));}int main() { Point p1(1, 2); Point p2(3, 4); Point::showCount(); // 输出点的个数 p1.display(); // 输出点的坐标 p2.display(); cout << "The distance between p1 and origin is: " << distance(p1) << endl; // 输出点到原点的距离 Point mid = p1.midpoint(3, 4); // 计算点与原点之间的中点 mid.display(); const Point* p = &p2; // 常指针 p->getX(); // 用常指针调用getX函数 p->getY(); // 用常指针调用getY函数 p->midpoint(5, 6); // 用常指针调用midpoint函数,因为midpoint函数是常函数,所以可以用常指针调用 //p->display(); // 错误,display函数不是常函数,不能用常指针调用 return 0;}结果说明
以上代码是一个简单的面向对象程序,定义了一个Point类,表示一个二维平面上的点,并实现了一些基本的点操作,包括输出点的坐标、计算点之间的中点、计算点到原点的距离等。同时,还定义了一个静态成员变量count,用于统计点的个数,以及一个友元函数distance,用于求出点到原点的距离。
在main函数中,通过创建Point对象,调用类的成员函数以及静态成员函数,展示了Point类的基本使用方法。同时,还通过常指针演示了如何使用常函数以及不能使用常指针调用非常函数的情况。程序最后输出了点的个数、点的坐标、点到原点的距离以及点与原点之间的中点坐标。
一、实验目的:通过类的设计与实现,将所学知识点综合应用。 1.类的设计与定义,构造函数等。 2.静态成员,友元,常引用等 二、实验要求: 1.设计点类Point,构造函数自行设计 2.输出点的坐标(普通成员函数),输出点的个数(静态成员函数) 3.计算点到原点之间的距离(友元函数) 4.计算点与原点之间的中点(常函数) 5.用常对象调用中点 6.用常指针实现其它函数的调用 测试该类,运行成功。 点类Point的设计图如下: Point int x; int y; static int count=0; //统计点的个数 Point(int x =0,int y=0); int getX(); //得到x int getY(); //得到y void display(); //输出x,y Point midpoint(int x,int y) const;//两点举例 static void showCount(); //输出个数 friend double distance();//求出点到原点的距离
以下是符合要求的程序:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
class Point {
private:
int x;
int y;
static int count; // 统计点的个数
public:
Point(int x = 0, int y = 0) {
this->x = x;
this->y = y;
count++;
}
int getX() {
return x;
}
int getY() {
return y;
}
void display() {
cout << "x: " << x << ", y: " << y << endl;
}
Point midpoint(int x, int y) const {
int midX = (this->x + x) / 2;
int midY = (this->y + y) / 2;
return Point(midX, midY);
}
static void showCount() {
cout << "The count of points is: " << count << endl;
}
friend double distance(Point p); // 求出点到原点的距离
};
int Point::count = 0;
double distance(Point p) {
return sqrt(pow(p.x, 2) + pow(p.y, 2));
}
int main() {
Point p1(1, 2);
Point p2(3, 4);
Point::showCount(); // 输出点的个数
p1.display(); // 输出点的坐标
p2.display();
cout << "The distance between p1 and origin is: " << distance(p1) << endl; // 输出点到原点的距离
Point mid = p1.midpoint(3, 4); // 计算点与原点之间的中点
mid.display();
const Point* p = &p2; // 常指针
p->getX(); // 用常指针调用getX函数
p->getY(); // 用常指针调用getY函数
p->midpoint(5, 6); // 用常指针调用midpoint函数,因为midpoint函数是常函数,所以可以用常指针调用
//p->display(); // 错误,display函数不是常函数,不能用常指针调用
return 0;
}
```
阅读全文