使用类模设计友元类模板,含有两个数据成员,分别代表横纵坐标,用于初始化对象的构造函数,定义距离函数用于计算a和b的距离,成员函数display用语显示点对象的横纵坐标
时间: 2024-02-23 20:01:11 浏览: 132
以下是一个使用类模板设计友元类的示例代码:
```c++
#include <iostream>
#include <cmath>
template<typename T>
class Point {
private:
T x, y;
public:
Point(T x, T y) : x(x), y(y) {}
template<typename U>
friend class Distance;
void display() {
std::cout << "(" << x << ", " << y << ")" << std::endl;
}
};
template<typename T>
class Distance {
public:
static double distance(const Point<T>& a, const Point<T>& b) {
double dx = a.x - b.x;
double dy = a.y - b.y;
return std::sqrt(dx * dx + dy * dy);
}
};
int main() {
Point<int> a(0, 0);
Point<int> b(3, 4);
std::cout << "The distance between ";
a.display();
std::cout << "and ";
b.display();
std::cout << "is " << Distance<int>::distance(a, b) << std::endl;
return 0;
}
```
在这个示例中,我们定义了一个类模板Point,用于表示二维平面上的点,包含两个数据成员,分别代表横纵坐标。我们还定义了一个友元类模板Distance,用于计算两个点之间的距离。在Point类中,我们将Distance类声明为友元类模板,这样Distance类就可以访问Point类的私有成员。在Distance类中,我们定义了一个静态函数distance,用于计算两个点之间的距离。在main函数中,我们创建了两个Point对象a和b,并调用Distance类的distance函数计算它们之间的距离。最后,我们输出了计算结果。
注意,这里我们使用了模板参数T来表示点的坐标类型,例如int、double等。在main函数中,我们创建了两个Point<int>对象,因此我们使用Distance<int>::distance函数来计算它们之间的距离。如果我们想要使用其他类型,例如double,我们只需要将Point<double>和Distance<double>::distance函数即可。
阅读全文