wie setze ich Funktion die Objekt zurückgibt richtig ein??
-
Ich frag mich bloß warum du ihm unbedingt das Fabrik-Pattern erklären willst, wo er doch garnicht danach gefragt hat.
-
es verwirrt mich mehr der syntax, eben aus dem grund, weil ich noch nie mit smart uder autopointern gearbeitet habe!
Allerdings lehne ich sie sicher nicht ab, aber sie scheinen mir etwas kompliziert, vorallem da ich mit normalen pointern schon stress hatte (Funktionszeiger hab ich mir noch nicht angeschaut....)!
Was eine factory ist, kann ich mir schon ungefähr vorstellen..
-
ja, und Volkard hat mal gesagt, mann soll die sich solang aufheben, bis man sie ausversehen verstanden hat
-
Die Syntax hat eigentlich nichts mit autopointer zu tun, sondern eher was mit Templates. Es wäre also nicht schlecht, wenn du dir in deinem C++ Buch anschaust, was ein Template ist.
Kennst du z.B. std::vector? Das ist die gleiche Syntax wie in meinem auto_ptr-Beispiel.
std::vector<TMember> vec; // erstelle Vector vom Typ TMember vec.push_back(new TMember()); // füge ein TMember hinten an
Wenn dir die Container aus C++ noch nicht bekannt sind, dann hast du noch viel zu lernen.
Mit Templates kann man z.b. eine Klasse typisieren, den Typ gibt man halt in den spitzen Klammern an.
Das gleiche ist beim auto_ptr der Fall. Der Autopointer will einfach nur wissen, mit welchem Typ er arbeiten soll.
Was der Autopointer macht, habe ich eigentlich in meinem ersten Posting angegeben und nullable glaub ich auch. Ansonst: besorg dir ein vernünftiges Buch über die STL, damit du nicht andauernd im Netz suchen mußt.
-
also templates hab ich eigentlich schon so bissl:
//template funktion?? template <class t> void swap(t& a,t& b) { t temp=a; a=b; b=temp; } //template klasse?? template <class t> class test { private: t* data; public: test(int /* oder t??? */ size){data = new t[size];} virtual ~test(){delete[] data];} }; //in main test<double> t(5); //so richtig??
nur, um zu zeigen, das ich doch schon bisschen was kann
allerdings mit vector und so hab ich auch noch nix gemacht, weil direkt zu dem thema steht in emeinen büchern nix....
-
Das mit den Templates sieht doch gut aus. Das Problem bei auto_ptr ist auch gewöhnlich nicht die Syntax (grammatikalische Korrektheit), sondern die Semantik. Wenn z. Bsp. ein gültiger auto_ptr a einem auto_ptr b zugewiesen wird (a wird kopiert), dann wird a ungültig.
-
ich glaub das ist ein thema, was ich mir später mal anschaue...ist wohl schon eher expertenthematik!
oder hast gutes tutorial wo soetwas erklärt wird?
-
mann! das problem mit c++ ist, daß die dinge immer viel komplizierter gemacht werden als sie sind.
aber unser was? ist ja noch anfänger! der ist schon froh, wenn er ein programm hinkriegt, das überhaupt funtioniert.
class TMember { public: void ShowIt()const{cout<<"Test"<<endl;} }; class TBase { public: TMember CreateIt(){return TMember(); } // so gehts am einfachsten // ginge aber auch so: // TMember CreateIt(){TMember t; return t;} }; int main(int argc, char* argv[]) { // TBase *b = new Base(); //Base-Objekt erzeugt, und jetzt?? // und jetzt nichts mehr! beim erzeugen eines objekts wird // der konstruktor automatisch aufgerufen. damit erfolgt // hier auch automatisch die ausgabe von "Test". TBase b; // das tuts auch. das praktische an c++ ist, daß man nicht mehr // so viele zeiger braucht. aber nur, wenn man von den // möglichkeiten auch gebrauch macht! return 0; }
du mußt also nicht immer erst eine variable deklarieren, um ein objekt zu erzeugen. mit return TMember(); geht es auch. das geht genauso wie mit dem operator new nur eben ohne new davor. sowas nennt man dann ein temoräres objekt.
-
damit das programm auch erfolgreich kompiliert werden kann mußt du aber noch
#include<iostream> using namespace std;
an den programmanfang setzten. sonst funktioniert die sache mit dem cout nicht.
-
also das mit using namespace std; weiß ich nu schon!
Zu deinen anderen Post...da versteh ich nicht ganz, was das mit meinem problem zu tun hat....du erzeugst doch nur ein Base Objekt aufm Stack und nicht aufm Heap...
Aber es wird doch nciht automatisch ein Member Objekt erzeugt...oder?
hm...
-
was? schrieb:
Aber es wird doch nciht automatisch ein Member Objekt erzeugt...oder?
hm...Ganz ehrlich? Hier versteht NIEMAND was du eigentlich willst. Vielleicht weil du etwas willst, was es garnicht gibt.
-
na beim vorletzten beitrag von konfusios, wird doch beim erzeugen des TBase Objektes nicht automatisch ein TMember Objekt mit erzeugt, oder??
-
was? schrieb:
na beim vorletzten beitrag von konfusios, wird doch beim erzeugen des TBase Objektes nicht automatisch ein TMember Objekt mit erzeugt, oder??
Sollte es das denn? Wollte Konfusius nicht etwas anderes mitteilen?
Konfusius schrieb:
du mußt also nicht immer erst eine variable deklarieren, um ein objekt zu erzeugen. mit return TMember(); geht es auch. das geht genauso wie mit dem operator new nur eben ohne new davor. sowas nennt man dann ein temoräres objekt.
-
Bau doch einfach einen op=...
myClass& operator=(MyClass& a){ //... return *this; }
Dann kannst du:
MyClass b; b=a;
Ghost