Frage

class TestPtr : protected QSharedPointer<Test>

wo Test ist eine abstrakte Schnittstellenklasse. Das TestPtr Die Klasse sollte als Smart Zeiger -Klasse dienen.

Bedeutet das Klasse? TestPtr ist aus der Klasse abgeleitet Test ? Ist Klassentest in einem intelligenten Zeiger eingeschlossen? Ich habe das gelesen QSharedPointer ist eine Vorlagenklasse. Könnte jemand bitte klarstellen?

War es hilfreich?

Lösung

Was es nicht bedeutet

  1. Dass TestPtr kommt von Test -- Es tut nicht.
  2. Dass class Test ist in einen intelligenten Zeiger eingeschlossen (aber in der Nähe: das bedeutet das Beispiele von TestPtr wird tatsächlich kluge Zeiger sein Test ohne die Welt darüber zu informieren, außer als Autor von TestPtr entscheidet sich ausdrücklich dafür)

Was es bedeutet

Es bedeutet das TestPtr will die Funktionalität eines intelligenten Zeigers auf implementieren Test (welches ist was QSharedPointer<Test> ist - bitte beachten Sie, ich habe keine Ahnung genau was QSharedPointer Ich mache nur "das, was im Namen ist").

Um dies zu erreichen, der Autor von TestPtr Pläne, die in die inneren Werke von eingebauten Funktionen ausführlich zu nutzen QSharedPointer (deshalb TestPtr Erben anstatt eine zu haben QSharedPointer Mitglied - in der Lage sein, die zu verwenden protected Mitglieder von QSharedPointer).

Der Autor plant jedoch für TestPtr zu nicht äquivalent zu a QSharedPointer<TestPtr> Auch wenn die Klasse ungefähr die gleiche Funktionalität hat (wir kennen den Grund dafür nicht mit den angegebenen Informationen). Deshalb ist das Erbe nicht public.

Andere Tipps

TestPtr wird aus der jeweiligen Version der Vorlagenklasse abgeleitet QSharedPointer das wurde mit der Klasse instanziiert Test als Vorlageparameter.

Bedeutet dies, dass der KlassentestPTR aus dem Klassentest abgeleitet wird?

Nein. TestPtr ist abgeleitet von QSharedPointer.

Ist Klassentest in einem intelligenten Zeiger eingeschlossen?

Ja. Eher, QSharedPointer<Test> ist eine kluge Zeigerklasse, die es verwaltet Test Zeiger.

Ich habe gelesen, dass QsharedPointer eine Vorlagenklasse ist. Könnte jemand bitte klarstellen?

Templates abstrakten Typen, ähnlich wie die Funktionen abstrahierter Werte aus Operationen. Zum Beispiel,

int i,j; 
...
i = 2*i+1;
j = 2*j+1;

kann abstrahiert werden zu:

void foo(int &x) {
    x = 2*x + i;
}

...
int i,j,
...
foo(i);
foo(j);

In ähnlicher Weise, anstatt separate Klassen wie:

class IntSharedPtr { typedef int value_type; ... };
class FloatSharedPtr { typedef float value_type; ...};

Sie können eine Vorlagenklasse haben:

template <typename _T>
class SharedPtr { typedef _T value_type; ...};

typedef SharedPtr<int> IntSharedPtr;
typedef SharedPtr<float> FloatSharedPtr;

Endlich, das protected bedeutet, dass Mitglieder von QSharedPointer sind nur in a zugänglich TestPtr durch TestPtr und seine Nachkommen. Vermuten TestPtr Überschreibt nicht operator * und hat einen Konstruktor, der a nimmt Test (oder Verweis auf a Test). Dann würde das Folgende aufgrund von Zugriffsbeschränkungen fehlschlagen:

int main() {
    Test bar;
    TestPtr pbar(bar);

    *pbar; // Error: QSharedPointer<Test>::operator *() is protected within this context.
}

QsharedPointer ist eine Vorlagenklasse, und Test ist das, was es vorlagen.

TestPTR erbt von QSHARDPOInter (nicht test - es sei denn, QSHARDPOINTER erbt vom Test - nicht genügend Informationen in der Frage, um dies zu beantworten, aber es möglich).

Aus dem Namen klingt es so, als ob QsharedPointer ein intelligenter Zeiger ist, aber ich bin mit dieser Klasse nicht vertraut, um zu antworten.

In Bezug auf die geschützte Erbschaft möchten Sie sich möglicherweise Folgendes ansehen

http://www.parashift.com/c+-faq-lite/private-inheritance.html

Nein, KlassentestPTR wird nicht aus dem Klassentest abgeleitet. Klasse testPtr leitet sich aus

class QSharedPointer<Test>

Das ist wirklich Klasse qSharedPointer, ausgedrückt in Bezug auf den Klassentest.

Klasse qSharedPointer ist eine Vorlagenklasse, dh eine Klasse, die einmal geschrieben wurde, dann aber für den Test oder andere Klassen verwendet werden kann.

Zum Beispiel könnten Sie ähnlich wie bei der Klasse QSHARDPOINTER eine solche Klasse haben:

template <class T>
  class Vector
    {
    };

Sie könnten dann Instanzen dieser Vektorklasse haben, die Vektoren verschiedener Dinge speichert. Zum Beispiel Vector<int> ist eine Klasse, die INTs speichert, und Vector<bool> ist eine andere Klasse, die Booleane speichert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top