友元函数、成员函数和普通函数使用上的不同

简介: 友元函数、成员函数和普通函数使用上的不同

设计并测试一个矩形类(Rectangle),属性为矩形的左下与右上角的坐标,矩形水平放置。操作为计算矩形周长与面积。类对象的数据由友元函数来进行访问,并对比友元函数、成员函数和普通函数使用上的不同。

#include <iostream>
using namespace std;
class Rectangle {
public:
    Rectangle(int x1, int y1, int x2, int y2) : x1_(x1), y1_(y1), x2_(x2), y2_(y2) {}
    // 成员函数计算周长
    int getPerimeter() const {
        return 2 * (abs(x2_ - x1_) + abs(y2_ - y1_));
    }
    // 成员函数计算面积
    int getArea() const {
        return abs(x2_ - x1_) * abs(y2_ - y1_);
    }
    // 友元函数访问对象数据
    friend void printRectangleData(const Rectangle& rect);
private:
    int x1_, y1_, x2_, y2_;
};
// 友元函数实现
void printRectangleData(const Rectangle& rect) {
    cout << "矩形的左下角坐标: (" << rect.x1_ << ", " << rect.y1_ << ")" << endl;
    cout << "矩形的右上角坐标: (" << rect.x2_ << ", " << rect.y2_ << ")" << endl;
    cout << "矩形的周长: " << rect.getPerimeter() << endl;
    cout << "矩形的面积: " << rect.getArea() << endl;
}
int main() {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    Rectangle rect(a,b,c,d);
    printRectangleData(rect);
    return 0;
}

我们使用成员函数`getPerimeter()`和`getArea()`来计算矩形的周长和面积。我们还创建了一个友元函数`printRectangleData()`来访问矩形类的对象数据。通过比较,我们可以看到友元函数可以直接访问对象的私有成员,而成员函数和普通函数需要通过对象调用才能访问对象的私有成员。

目录
相关文章
|
Unix Linux iOS开发
振南技术干货集:各大平台串口调试软件大赏(4)
振南技术干货集:各大平台串口调试软件大赏(4)
|
设计模式 前端开发 网络协议
软件体系结构 - 软件架构复用
软件体系结构 - 软件架构复用
529 0
|
机器学习/深度学习 自然语言处理 算法
Machine Learning机器学习之文本分析
Machine Learning机器学习之文本分析
|
8月前
|
监控 Java Unix
6个Java 工具,轻松分析定位 JVM 问题 !
本文介绍了如何使用 JDK 自带工具查看和分析 JVM 的运行情况。通过编写一段测试代码(启动 10 个死循环线程,分配大量内存),结合常用工具如 `jps`、`jinfo`、`jstat`、`jstack`、`jvisualvm` 和 `jcmd` 等,详细展示了 JVM 参数配置、内存使用、线程状态及 GC 情况的监控方法。同时指出了一些常见问题,例如参数设置错误导致的内存异常,并通过实例说明了如何排查和解决。最后附上了官方文档链接,方便进一步学习。
1069 4
|
9月前
WLAN AutoConfig 启动报错“错误 1068:依赖服务或组无法启动“
启动计算机时发现网络图标异常且WiFi图标消失,尝试启动WLAN AutoConfig服务时出现报错。解决步骤包括:1. 打开注册表并检查Ndisuio参数;2. 修改DisplayName和Start值;3. 以管理员身份打开命令提示符,输入`netsh winsock reset`重置Winsock目录。完成后重启计算机并重新启动WLAN AutoConfig服务即可恢复正常网络功能。
762 1
|
12月前
|
存储 数据挖掘 数据库
虚拟化数据恢复—VMFS简介&误删除虚拟机的数据恢复案例
物理区:物理上连续的磁盘空间,即通常意义上的分区。 本地区:VMFS管理的物理区分为保留区和本地区,前面一部分是保留区,后面部分是本地区。本地区又分为元文件区和数据区。 元文件:与NTFS的元文件类似,属于FS的管理用数据。VMFS有6个元文件:.VH.SF/.FBB.SF/.FDC.SF/.SBC.SF/.PBC.SF/.PB2.SF。 元文件区:6个元文件占用的所有空间,在本地区的前面部分。 数据区:用于存放文件数据。 datastore:在ESX服务器上看到的VMFS存储空间。 LV:logical volume,所指的范围其实和本地区一样,即虚拟化卷。 LVM逻辑卷组:用来管理跨dis
|
网络协议 开发工具 C#
RTSP协议探究和RTSP播放器技术实现
RTSP播放器可广泛应用于对延迟要求比较高的场景下,比如协同操控相关的智能机器人或无人机、实时视频监控、远程视频会议、网络电视等。通过控制信令实现对流媒体数据的远程控制和传输管理。
1268 0
|
存储 大数据 数据挖掘
云计算与大数据:从基础设施到实际应用
云计算与大数据:从基础设施到实际应用
1609 0
|
数据可视化 数据挖掘 API
Python中的数据可视化利器:Matplotlib与Seaborn对比解析
在Python数据科学领域,数据可视化是一个重要环节。它不仅帮助我们理解数据,更能够让我们洞察数据背后的故事。本文将深入探讨两种广泛使用的数据可视化库——Matplotlib与Seaborn,通过对比它们的特点、优劣势以及适用场景,为读者提供一个清晰的选择指南。无论是初学者还是有经验的开发者,都能从中找到有价值的信息,提升自己的数据可视化技能。
695 3
|
数据可视化 Linux API
利用Matplotlib和Seaborn进行数据可视化与探索性分析
本文探讨了Python中数据可视化的关键工具——Matplotlib和Seaborn。Matplotlib是基础绘图库,可用于创建折线图,通过自定义参数实现图表美化。Seaborn是建立在Matplotlib之上的库,专注于统计图形,提供箱线图、散点图等,并有内置数据集便于学习。通过案例展示了如何利用这两个库分析销售数据,包括散点图、分布图和类别对比图,以助于数据探索和理解。
256 6