Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Alternativen gibt es zu Friend-Funktionen?

Welche Alternativen gibt es zu Friend-Funktionen?

王林
王林Original
2024-04-16 17:18:011049Durchsuche

Alternativen zu Friend-Funktionen sind: Kapseln von Klassenmethoden: Definieren Sie Methoden im privaten Teil der Klasse und machen Sie sie als Friend-Funktionen verfügbar, um die Kapselung aufrechtzuerhalten und externen Zugriff auf private Mitglieder zu ermöglichen. Bridge-Modus: Verwenden Sie die Bridge-Klasse, um einen Zeiger auf die Zielklasse zu enthalten, und fügen Sie ihr eine Friend-Funktion hinzu, um die Methode der Zielklasse zu delegieren. Vorlagen-Metaprogrammierung: Verwenden Sie Vorlagen-Metaprogrammierung, um Klassenmitglieder zur Kompilierungszeit zu manipulieren, um den Zugriff auf private Mitglieder zu ermöglichen.

Welche Alternativen gibt es zu Friend-Funktionen?

Eine Alternative zu Friend-Funktionen

Eine Friend-Funktion ist eine spezielle Art von Funktion, die auf private Mitglieder anderer Klassen zugreifen kann. Obwohl Friend-Funktionen praktisch sind, können sie auch die Kapselung zerstören. Daher ist es beim Entwerfen einer Klasse am besten, die Verwendung von Friend-Funktionen so weit wie möglich zu vermeiden.

Hier sind einige Alternativen zu Friend-Funktionen:

Klassenmethoden kapseln :

Definieren Sie eine Methode im privaten Teil der Klasse und stellen Sie sie als Friend-Funktion bereit. Dadurch bleibt die Kapselung erhalten, während externen Funktionen weiterhin der Zugriff auf private Mitglieder ermöglicht wird.

Bridge-Muster verwenden:

Erstellen Sie eine Bridge-Klasse, die einen Zeiger auf die Zielklasse enthält. Fügen Sie die Friend-Funktion zur Bridge-Klasse hinzu und delegieren Sie dann die Methoden der Zielklasse an die Friend-Funktion.

Vorlagen-Metaprogrammierung verwenden:

Verwenden Sie Vorlagen-Metaprogrammierung zur Kompilierungszeit, um Klassenmitglieder zu manipulieren. Diese Methode ist komplexer, ermöglicht aber den Zugriff auf private Mitglieder zur Laufzeit.

Praktischer Fall:

Angenommen, wir haben eine Person 类,其私有成员为 nameage。我们要定义一个 printInfo 函数来打印 Person Information.

// 使用封装类方法
class Person {
private:
    std::string name;
    int age;

    friend void printInfo(const Person& p) {
        std::cout << "Name: " << p.name << std::endl;
        std::cout << "Age: " << p.age << std::endl;
    }
};

// 使用桥接模式
class PersonBridge {
private:
    Person* person;

public:
    PersonBridge(Person* p) : person(p) {}

    void printInfo() {
        std::cout << "Name: " << person->name << std::endl;
        std::cout << "Age: " << person->age << std::endl;
    }
};

// 使用模板元编程
template <typename T>
void printInfo(const T& p) {
    std::cout << "Name: " << p.name << std::endl;
    std::cout << "Age: " << p.age << std::endl;
}

Das obige ist der detaillierte Inhalt vonWelche Alternativen gibt es zu Friend-Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn