📌  相关文章
📜  链接列表类中的运算符重载“<<”和“>>”运算符(1)

📅  最后修改于: 2023-12-03 14:58:13.805000             🧑  作者: Mango

链接列表类中的运算符重载 <<>> 运算符

在面向对象编程中,运算符重载是指通过改变运算符的行为来适应自定义类的需求。在链接列表类中,我们可以通过重载输入输出运算符 <<>> 来实现方便的输入和输出操作。

运算符重载概述

运算符重载允许我们使用自定义的类类型对象来进行类似原生数据类型的操作。运算符重载是通过定义在类中的特殊成员函数来实现的,这些函数使用关键字 operator 后跟要重载的运算符来命名。

<< 运算符重载

在链接列表类中,<< 运算符重载用于打印链表的内容。我们可以通过重载该运算符,使用类似于标准输出的语法来输出链表的元素。

以下是 << 运算符重载的示例代码:

#include <iostream>

class Node {
public:
    int data;
    Node* next;
};

class LinkedList {
public:
    Node* head;

    // 在链表尾部插入元素
    void insert(int data) {
        Node* newNode = new Node();
        newNode->data = data;
        newNode->next = nullptr;

        if (head == nullptr) {
            head = newNode;
        } else {
            Node* temp = head;
            while (temp->next != nullptr) {
                temp = temp->next;
            }
            temp->next = newNode;
        }
    }

    // << 运算符重载
    friend std::ostream& operator<<(std::ostream& os, const LinkedList& list) {
        Node* temp = list.head;
        while (temp != nullptr) {
            os << temp->data << " ";
            temp = temp->next;
        }
        return os;
    }
};

int main() {
    LinkedList myList;
    myList.insert(1);
    myList.insert(2);
    myList.insert(3);

    std::cout << "Linked List: " << myList << std::endl;
    return 0;
}

在上述示例代码中,我们使用 friend 关键字将 << 运算符重载函数声明为 LinkedList 类的友元函数。这样可以访问 LinkedList 类的私有成员 head,以便遍历链表并打印元素。

>> 运算符重载

在链接列表类中,>> 运算符重载用于接收用户输入并将其插入到链表中。我们可以通过重载该运算符,使用类似于标准输入的语法来输入链表的元素。

以下是 >> 运算符重载的示例代码:

#include <iostream>

class Node {
public:
    int data;
    Node* next;
};

class LinkedList {
public:
    Node* head;

    // 在链表尾部插入元素
    void insert(int data) {
        Node* newNode = new Node();
        newNode->data = data;
        newNode->next = nullptr;

        if (head == nullptr) {
            head = newNode;
        } else {
            Node* temp = head;
            while (temp->next != nullptr) {
                temp = temp->next;
            }
            temp->next = newNode;
        }
    }

    // >> 运算符重载
    friend std::istream& operator>>(std::istream& is, LinkedList& list) {
        int data;
        std::cout << "Enter element (0 to stop): ";
        while (true) {
            is >> data;
            if (data == 0) {
                break;
            }
            list.insert(data);
            std::cout << "Enter next element (0 to stop): ";
        }
        return is;
    }
};

int main() {
    LinkedList myList;
    std::cin >> myList;

    std::cout << "Linked List: " << myList << std::endl;
    return 0;
}

在上述示例代码中,我们同样使用 friend 关键字将 >> 运算符重载函数声明为 LinkedList 类的友元函数。通过循环读取用户输入的数据,并将其插入链表中,直到用户输入 0 表示停止。

结论

通过重载 <<>> 运算符,我们可以实现链接列表类的方便输入和输出操作。这种方式使得用户能够直观地使用标准的输入输出语法来操作链表,增强了代码的可读性和易用性。