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

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

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

目录
相关文章
|
3月前
|
C++ 开发者
43运算符重载函数作为类成员函数和友元函数
43运算符重载函数作为类成员函数和友元函数
23 0
|
11月前
|
编译器 程序员
成员函数
成员函数
|
3月前
|
C++
C++程序中的类成员函数
C++程序中的类成员函数
29 1
|
3月前
|
设计模式 缓存 编译器
【C++友元函数】深入探索C++友元函数:从基础到应用
【C++友元函数】深入探索C++友元函数:从基础到应用
67 0
运算符重载的函数作为类的成员函数和友元函数
🐰运算符重载的函数作为类的成员函数和友元函数 🌸运算符重载定义为类的成员函数 🌸运算符重载函数作为类的友元函数 🌸实现“+”,“-“的普通重载函数和友元重载函数 🌸单目运算符"++"和"--"的重载
【C++之成员函数】类外定义成员函数
【C++之成员函数】类外定义成员函数
|
编译器 C++
C++面向对象友元,全局函数、类、成员函数做友元
在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术 友元的目的就是让一个函数或者类 访问另一个类中私有成员 友元的关键字为 ==friend== 友元的三种实现 • 全局函数做友元 • 类做友元 • 成员函数做友元 全局函数做友元
120 0
C++面向对象友元,全局函数、类、成员函数做友元
|
编译器 C++
【C++】This指针和复制构造函数
【C++】This指针和复制构造函数
138 0