Klassentemplate Vektor für verschiedene Datentypen
-
Hallo.
Ich habe ein Klassentemplate vektor geschrieben. Hier mal die Konstruktoren:
template<class T> class vektor { private: unsigned int _sz; T* _vekt; public: vektor():_sz(1) { _vekt = new T[_sz]; _vekt[0] = 0; } vektor(unsigned int sz):_sz(sz) { _vekt = new T[_sz]; for (unsigned int i=0;i<_sz;i++) { _vekt[i] = 0; } } ...
Dieses Template soll für mehrere Datentypen funktionieren (LONG, INT, FLOAT, DOUBLE und CHAR)
Für die ersten paar kein Problem, jedoch mit CHAR
Soweit ich das verstanden habe, kann man jetzt eine Template-Spezialisierung machen, was ja aber bedeutet würde, dass ich quasi ein neues Template schreibe und nicht auf die Methoden und Konstruktoren des eigentlichen Klassentemplates zurückgreifen kann, oder? So funktioniert es auf jeden Fall.
Kann ich nur den Konstruktor anpassen?
Vielen Dank, MfG BBSkater
-
Okay. Habe es jetzt über die Templatespezialisierung gelöst. Das Gleiche müßte ja dann auch gehen, wenn ich Instanzen einer Klasse CComplex in dem Vektor zusammenfassen möchte. Nur irgendwie fehlt mir da der Ansatz.
class CComplex { private: // Membervariablen double _re; double _im; public: // Konstruktoren CComplex(double real, double imag); ~CComplex(void); ...
Ich hoffe, mir kann da jemand auf den richtigen Denkpfad helfen.
Vielen Dank, MfG BBSkater
-
So gelöst, es funktioniert.
Nächste Frage.
Ich habe in dem Klassentemplate vektor einen operator<<
friend ostream& operator<< (ostream& out, const vektor<T> rhs) { out << "{"; for (unsigned i=0;i<rhs._sz-1;i++) { out << rhs._vekt[i] << ", "; } out << rhs._vekt[rhs._sz-1] << "}" << endl; return (out); }
und in der Klasse CComplex auch
friend ostream& operator<< (ostream& out, const CComplex rhs) { out.setf(ios::fixed,ios::floatfield); out.precision(1); return (out << rhs._re << "+" << rhs._im << "i"); }
Wenn ich jetzt in der main das ganze ausgeben möchte, werden dann beide operatoren benutzt?
Die Ausgabe sollte ja dann ungefähr so Aussehen:
cout << "VC = " << vc; // Vektor<CComplex>
VC = {3+2i, 4+8i, ...}
Außerdem noch eine Frage, nicht das das Problem des Nichtfunktionierens eine andere Ursache hat. Passt das soweit oder hab ich da nen Denkfehler.
vektor<CComplex*> vc; vc.setAttr(0,&c1); cout << vc.getAttr(0)->getReal() << "+" << vc.getAttr(0)->getImag() << "i" << endl;
So bringt er mir die Richtige ormatierung, aber halt nur eine Complexzahl aus Vektor.