Tag: dynamic-cast
Der dynamic_cast-Konvertierung ermöglicht für die sichere Umwandlung von Zeigern (und Referenzen), um Klassen, oben, unten und seitwärts in die Vererbungshierarchie.
3
Antworten
Diese nicht kompilieren in C++: class A { }; class B : public A { }; ... A *a = new B(); B *b = dynamic_cast<B*>(a); Ich FAQ-freundlich-diese Frage. Die Antwort ist kurz, aber ich denke, ziemlich
5
Antworten
(Bitte kein raten, ich solle abstrakten X mehr und fügen Sie eine weitere Methode, um es.) In C++, wenn ich eine variable x Typ X* und ich will etwas bestimmtes, wenn es auch vom Typ Y* (Y
5
Antworten
Ich viele Male gesagt habe (und gesehen, die mich in der Praxis), dass die Verwendung von dynamic_cast bedeutet oft schlechtes design, weil es kann und sollte ersetzt werden, mit virtuellen Funktionen. Betrachten Sie beispielsweise den folgenden code:
3
Antworten
Umgebung: Linux, C++ /Qt 4x Ich verstehe nicht, warum der folgende niedergeschlagen NULL zurück? Ich klebte Basis-und abgeleitete Klasse weiter unten. Vielen Dank im Voraus für Tipps oder Anregungen. -Ed void MainWindow::onRtledaEventHandler(fes::EventArgs eventArgs) { //This cast returns
3
Antworten
Betrachten zwei Zeiger A* a; B* b; Beide A und B sind polymorphe Klassen. Wie um zu überprüfen, ob a und b auf das gleiche Objekt zeigen oder nicht? Mehr genau, lassen Sie uns geben Sie a
3
Antworten
Ich habe zwei Klassen A und B, B erbt von A. Wenn ich eine shared_ptr<A> Objekt, das ich kenne, ist wirklich ein B-Subtyp, wie kann ich ein dynamic cast für den Zugriff auf die API von B
2
Antworten
Möchte ich schreiben eine Methode, wo eine Base Objekt-Zeiger wird als parameter übergeben werden, und innerhalb der Methode wird es gegossen werden, um abgeleitete Objekt Zeiger. void func( const Base* const obj){ Derived* der = dynamic_cast<Derived*>(obj); }
1
Antworten
Nach dem, was ich lese, ist die Durchführung einer falschen Laufzeit dynamic_cast kann entweder werfen eine bad_cast-exception oder null zurückgeben. Ist es richtig zu sagen, es wird null zurückgeben, wenn Sie Gießen pointers? ich.e: class Base {
2
Antworten
Möchte ich cast das: class Base { public: virtual ~Base(){}; }; class Der : public Base {}; int main() { const Base* base = new Der; Der* der = dynamic_cast<Der*>(base); //Error return 0; } Was soll ich
3
Antworten
Angenommen ich habe eine Klasse A und eine Klasse B, abgeleitet von A. Nun möchte ich cast einen const-A* (genannt "a") a B* mit dynamic_cast (siehe unten). Wenn "ein" war wirklich eine B*, dann ist mein Gegenstand,
4
Antworten
Ich Lerne Ausnahmebehandlung in C++ und läuft in ein problem. Hier ist der code: #include<iostream> #include<exception> using namespace std; class A { public: virtual void f(void){} }; class AA:public A { public: void aa(void){}; }; int main(void)
2
Antworten
Ich bin mit dynamic_cast in meiner Hand zu werfen Zeiger als einige Sache wie unten Base *base = here storing the pointer; Derived *derived = dynamic_cast<Derived*>(base); In dem Fall der sockel nicht über den Zeiger auf die
2
Antworten
Könnte mir jemand erklären, in so einfachen Worten wie möglich (oder so einfach, wie man es gerne hätte), was qobject_cast ist, was es tut und warum wir Sie brauchen würden, um die Besetzung ein Klasse-Typ zum anderen?
5
Antworten
Ich habe ein array mit benutzerdefinierten Klasse Student-Objekte. CourseStudent und ResearchStudent beide Erben von Studenten, und alle Instanzen von Student sind, der einen oder der anderen dieser. Habe ich eine Funktion zum Durchlaufen des Arrays ermitteln, der
1
Antworten
Ich habe eine abstrakte Klasse namens "A", und die anderen Klassen (B, C, D, E, ...), die Eine Ich habe eine Liste von Objekten. Ich möchte in der Lage zu werfen dynamicly jedes Objekt in dieser Liste
4
Antworten
habe ich zwei Klassen in java: class A { int a=10; public void sayhello() { System.out.println("class A"); } } class B extends A { int a=20; public void sayhello() { System.out.println("class B"); } } public class HelloWorld
7
Antworten
Momentan habe ich diesen code-Typ: private void FillObject(Object MainObject, Foo Arg1, Bar Arg2) { if (MainObject is SomeClassType1) { SomeClassType1 HelpObject = (SomeClassType1)MainObject; HelpObject.Property1 = Arg1; HelpObject.Property2 = Arg2; } else if (MainObject is SomeClassType2) { SomeClassType2
3
Antworten
Scott Meyer in seinem Buch Effective C++ sagt dynamic_cast werden verwendet, um sichere Typumwandlungen nach unten oder über eine Vererbungshierarchie. Das heißt, Sie nutzen dynamic_cast, cast von Zeigern oder Referenzen zu Basis-Klasse Objekte in die Zeiger oder
3
Antworten
Ich habe eine Klassen-Hierarchie wie folgt: class BaseSession : public boost::enable_shared_from_this<BaseSession> class DerivedSessionA : public BaseSession class DerivedSessionB : public BaseSession Innerhalb der abgeleiteten Klasse Funktionen, die ich regelmäßig aufrufen von Funktionen wie diese: Func(boost::dynamic_pointer_cast<DerivedSessionA>(shared_from_this())); Da ich
4
Antworten
In der folgende code, bei der Konstruktion obj im Fall 1, wir konstruieren eine derived Klasse, Objekt zu, aber seine member-Funktionen sind nur unzugänglich obj. So, während downcasting (d.h., im Fall 2), mit obj wie die Quelle,
4
Antworten
Ich habe ein problem mit einem shared_ptr eine Basis-Klasse, ich kann nicht scheinen zu können, rufen Sie die abgeleitete Klasse die Methoden, die bei der Dereferenzierung. Ich glaube der code wird Ausführlicher als ich: class Base :
5
Antworten
Ist es eine gute Praxis im Hinblick auf die dynamic_cast Fehlerbehandlung (außer nicht verwenden, wenn Sie nicht müssen)? Ich Frage mich, wie soll ich über die NULL-und bad_cast es werfen kann. Sollte ich das prüfen? Und wenn
4
Antworten
Ich war die überprüfung des Verhaltens von dynamic_cast und gefunden, dass, wenn es scheitert, std::bad_cast-Ausnahme wird ausgelöst, nur dann, wenn das Ziel ist ein Referenz-Typ. Wenn das Ziel ist ein Zeiger-Typ, dann wird keine exception geworfen von
3
Antworten
Warum erhalte ich den folgenden Fehler für den folgenden code nicht? 1>C:\Libs\boost_1_44\boost/smart_ptr/shared_ptr.hpp(259): error C2683: 'dynamic_cast' : 'my_namespace::A' is not a polymorphic type 1> D:\[location]\[header_filename].h(35) : see declaration of 'my_namespace::A' 1> C:\Libs\boost_1_44\boost/smart_ptr/shared_ptr.hpp(522) : see reference to function template
13
Antworten
ich würde gerne dynamische casting für eine java-variable, die casting-Typ gespeichert ist, in eine andere variable. dies ist regelmäßig Gießen: String a = (String) 5; dies ist, was ich will: String theType = 'String'; String a =
6
Antworten
Wir oft zu hören/Lesen, dass man vermeiden sollte-dynamic-casting. Ich Frage mich, was wäre 'der guten Nutzung' Beispiele, wie Sie? Edit: Ja, ich bin mir dessen bewusst,das andere thread: es ist in der Tat beim Lesen einer der
5
Antworten
Laut diesevoid* hat keine RTTI-Informationen, also eine Umwandlung von void* ist nicht legal, und es macht Sinn. Wenn ich mich richtig erinnere, dynamic_cast aus void* wurde auf gcc. Können Sie bitte klären. InformationsquelleAutor der Frage dimba |
3
Antworten
Ich bin neugierig zu wissen, was passiert, wenn das kompilieren von code mit einer dynamischen Besetzung, mit RTTI deaktiviert (entweder mit -fno-rttiauf GCC oder mit /GR- auf visual studio). Funktioniert der compiler "fällt zurück" zu static_cast ?
6
Antworten
Habe ich ein Stück code so Aussehen : TAxis *axis = 0; if (dynamic_cast<MonitorObjectH1C*>(obj)) axis = (dynamic_cast<MonitorObjectH1C*>(obj))->GetXaxis(); Manchmal stürzt es ab : Thread 1 (Thread -1208658240 (LWP 11400)): #0 0x0019e7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 #1 0x048c67fb
4
Antworten
Vor dem Lesen die Frage: Diese Frage ist nicht etwa, wie nützlich es ist, zu verwenden dynamic_cast. Seine nur über seine Leistung. Ich habe mir vor kurzem ein design entwickelt, wo dynamic_cast eine Menge verwendet wird. Bei
3
Antworten
Aus Gewohnheit für die überprüfung der null-Zeiger, ich habe mal geschrieben: MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0; if (c) {... In Kraft, die überprüfung auf einen null-Zeiger vor der übergabe an dynamic cast, und
9
Antworten
Ich bin ganz verwirrt mit der dynamic_cast - Schlüsselwort in C++. struct A { virtual void f() { } }; struct B : public A { }; struct C { }; void f () { A a;