📜  C++中的嵌套类(1)

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

C++中的嵌套类

在C++中,嵌套类也被称为内部类或者嵌套结构体/嵌套类。定义在一个类的内部的类被称为嵌套类。它们是一个类可以嵌套在另一个类的内部,可以访问外部类的私有成员。嵌套类可以用来将一个类的一些实现细节封装起来,使得代码更加清晰,结构更加合理。

语法格式

嵌套类的语法格式如下:

class OuterClass {
    // 外部类的定义
    public:
        // 内嵌类的定义
        class NestedClass {
            // 嵌套类的定义
        };
};
示例代码

以下是一个嵌套类的示例代码,其中嵌套类被用来实现一个简单的链表:

#include <iostream>

class LinkedList {
    private:
        struct Node {
            int data;
            Node* next;
        };
        Node* head;
    public:
        LinkedList() {
            head = nullptr;
        }
        void Add(int data) {
            Node* node = new Node;
            node->data = data;
            node->next = head;
            head = node;
        }
        void Print() {
            Node* current = head;
            while(current != nullptr) {
                std::cout<< current->data <<" -> ";
                current = current->next;
            }
            std::cout<<"null";
        }
        class Iterator {
            private:
                Node* current;
            public:
                Iterator(LinkedList* list) {
                    current = list->head;
                }
                int GetNext() {
                    int data = current->data;
                    current = current->next;
                    return data;
                }
                bool HasNext() {
                    return current != nullptr;
                }
        };
};

int main() {
    LinkedList list;
    list.Add(1);
    list.Add(2);
    list.Add(3);

    LinkedList::Iterator iterator(&list);
    while(iterator.HasNext()) {
        std::cout<< iterator.GetNext() <<" ";
    }

    std::cout<<"\nLinked list: ";
    list.Print();

    return 0;
}

在上面的示例代码中,Iterator是一个嵌套类,它被用于遍历链表。它可以访问外部类LinkedList的私有成员head,并且它的构造函数接受一个LinkedList类型的指针作为参数,用于初始化它自己的current成员变量。

总结

嵌套类是C++中非常有用的特性之一,它可以提高代码的组织性,使得代码更加清晰易懂。我们可以在嵌套类中访问外部类的私有成员,这为我们提供了更大的灵活性和控制性。