Rückgabe Objekt einer abgeleiteten Klasse über einen Zeiger seiner abstrakten Basis-Klasse

Ich muss ein Programm schreiben, welches in einer seine Funktion zurückkehren wird, eine abgeleitete Klasse, die über eine abstrakte Basisklasse, also, wenn die Klasse wieder zu den wichtigsten der Zugriff auf die abgeleitete Klasse mit virtuellen Methoden.

Bitte beachtet, dass ich nichts ändern kann im Hauptprogramm, da ich nicht das eine es zu schreiben.

#include<iostream>
using namespace std;
class A
{
private:
public:
    virtual void DoIt(void)=0;
    A(void){};
    ~A(void){};
};
class B:
        public A
{
private:
    int Num;
public:
    virtual void DoIt(void){Num=7;cout<<"its done";};
    B(void){};
    ~B(void){};
};
A& returnValue(void) 
{
        B item;
    return item;
}
void main()
{
    A& item=returnValue();
    item.DoIt();
}

Wenn ich versuche zu laufen, das die Letzte Zeile bricht der build sagen, dass DoIt ist eine pure virtual Funktion call.
irgendwelche Ideen?

  • Ist die Signatur von returnValue behoben? Sie sollte nicht wieder eine Referenz auf eine lokale variable.
  • es ist nicht fixiert. ich kann entscheiden, wie retrun mein Wert.
  • Das ist das Problem. Reservieren item dynamisch (B* item = new B;). Dann wieder ein Zeiger oder eine Referenz darauf. Das sollte es beheben.
  • Welchen compiler benutzt du? ideone kein problem kompilieren, aber es verursacht einen runtime error.
  • das wird sicher das problem beheben, aber es wird zu erhöhen eine andere: wie lösche ich den Speicher?
  • Ja, das stimmt so nicht wieder einen Verweis. Gibt einen Zeiger. Und dann können Sie es löschen wenn Sie möchten. ODER noch besser, verwenden Sie ein smart-pointer.
  • ich bin mit visal 2012, aber es läuft evtl. auf meiner Uni-compiler auf dem unix-system.
  • wie kann ich es löschen whene immer ich will? ich habe keine contrual über den main. was ist ein smart-pointer?
  • stackoverflow.com/questions/106508/...
  • Ich denke, man sollte eine gewisse Zusammenarbeit mit den Menschen, die schreiben Sie den rest des Codes. Sie sollten wissen, dass Sie löschen müssen. Dokument die Funktion, die Sie wissen lassen,....(wenn nicht mithilfe der smart-Pointer.)
  • wünschte, ich könnte, kann ich nicht sagen, Sie wie eine Sache ist, da es ist eine Aufgabe der Universität. dies ist das erste mal höre ich über "smart pointer" ich werde versuchen zu lernen, seine Verwendung und vielleicht wird es funktionieren. gibt es eine Möglichkeit, es zu benutzen mit der Verwendung der Vorlage? es ist nicht erlaubt.

Schreibe einen Kommentar