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

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

设计并测试一个矩形类(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()`来访问矩形类的对象数据。通过比较,我们可以看到友元函数可以直接访问对象的私有成员,而成员函数和普通函数需要通过对象调用才能访问对象的私有成员。

目录
相关文章
|
10月前
|
C++ 开发者
43运算符重载函数作为类成员函数和友元函数
43运算符重载函数作为类成员函数和友元函数
43 0
|
编译器 程序员
成员函数
成员函数
100 0
|
5月前
|
安全 C++
友元函数
友元函数
24 0
|
10月前
|
C++
C++程序中的类成员函数
C++程序中的类成员函数
73 1
|
存储 编译器 C语言
【C++基础】类与对象(中):默认成员函数、构造函数、析构函数、拷贝构造、赋值重载函数……
【C++基础】类与对象(中):默认成员函数、构造函数、析构函数、拷贝构造、赋值重载函数……
106 0
|
10月前
|
存储 编译器 C++
【C++类和对象】拷贝构造与赋值运算符重载(上)
【C++类和对象】拷贝构造与赋值运算符重载
|
10月前
|
编译器 C++ 索引
【C++类和对象】拷贝构造与赋值运算符重载(下)
【C++类和对象】拷贝构造与赋值运算符重载
|
存储 编译器 C++
【C++类和对象之拷贝构造、赋值运算符重载】
【C++类和对象之拷贝构造、赋值运算符重载】
运算符重载的函数作为类的成员函数和友元函数
🐰运算符重载的函数作为类的成员函数和友元函数 🌸运算符重载定义为类的成员函数 🌸运算符重载函数作为类的友元函数 🌸实现“+”,“-“的普通重载函数和友元重载函数 🌸单目运算符"++"和"--"的重载