wie setze ich Funktion die Objekt zurückgibt richtig ein??
-
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