Heim > 类库下载 > 其它类库 > Hauptteil

Friend-Deklaration und Vorlagenkonstruktor in der C-Klassenvorlage

高洛峰
Freigeben: 2016-10-12 15:52:48
Original
1631 Leute haben es durchsucht

Friend-Deklaration einer Klassenvorlage:

Wenn Sie Zugriff auf alle Instanzen einer bestimmten Vorlage gewähren, muss keine Deklaration der Klassenvorlage oder Funktionsvorlage im Bereich vorhanden sein. Wenn Sie eine Freundschaftsbeziehung auf eine bestimmte Instanziierung beschränken möchten, müssen Sie die Klasse oder Funktion deklarieren, bevor sie in einer Freunddeklaration verwendet werden kann.

template <class T>
class test
{
    template <class U> friend ostream& operator<< (ostream &os, const test<U> &obj); //友元的所有实例均具有访问权
    ...
};

class test;
template <class Type> ostream& operator<< (ostream &os, const test<Type> &obj);
template <class T>
class test
{
    friend ostream& operator<< <T> (ostream &os, const test<T> &obj);//友元为的T类型实例才有访问权
    ...
};
Nach dem Login kopieren

Vorlagenkonstruktor:

Wenn in einer Vorlagenklasse der Konstruktor und der Vorlagenkonstruktor gleichzeitig vorhanden sind, wird der Konstruktor zuerst aufgerufen. Ein Vorlagenkonstruktor wird nur aufgerufen, wenn seine Schnittstelle genau erfüllt ist. Der Compiler behandelt einen Vorlagenkonstruktor niemals als Konstruktor, und selbst wenn der Client keinen Kopierkonstruktor definiert, generiert der Compiler einen Standardkopierkonstruktor.

template <class T>
class test
{
public:
    test() { cout << "in my test construct" << endl;}
    test(const test &) { cout << "in my test copy" << endl;}
    template <class V>
    test(const test<V> &) { cout << "in my template copy" << endl;}
};


int main()
{
    test<int> t1;
    test<int> t2(t1);
    test<double> t3(t1);
    return 0;
}
Nach dem Login kopieren

Die Vorlagenfunktion test(const test &) sollte hier als Typkonvertierungskonstruktor bezeichnet werden, der den Typ eines Tests in test umwandeln kann, Das heißt, Vorlagenklassen mit unterschiedlichen Vorlagenparametern. Diese Anwendung besteht beispielsweise darin, dass dieser Konstruktor die Konvertierung abschließen kann, wenn ich ein Array vom Typ int habe, das ich an einen Parameter vom Typ Double Array übergeben möchte.

Die Ausgabestruktur des Programms ist:

in meinem Testkonstrukt

in meiner Testkopie

in meiner Vorlagenkopie

Anwendung in Paar- und auto_ptr-Klassen von stl


Quelle:php.cn
Erklärung dieser Website
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
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!