C++ Eigenen stl vector erschaffen: Operator zur Ausgabe überladen

flopower1996

Lt. Junior Grade
Registriert
Aug. 2014
Beiträge
401
Hey an alle,
ich habe ein Problem. Ich möchte meine eigenen dynamischen Vektoren machen und will dazu den << Operator überladen. Bei dynamischen Zeichenketten, hat das problemlos geklappt. Aber hier gestaltet es sich wirklich schwierig. Ich kopiere euch mal den Quelltext rein. Interessant wird es bei operator const char *(). Ich hoffe Ihr könnt mir bei der korrekten Überladung helfen. Nachher soll es mit cout << vektor; funktionieren...
Vektor.h
Code:
#include <iostream>
#include <string>
using namespace std;

class Vektor
{
private:
	double* vektor;
	int anz;
public:
	Vektor(double* vektor, int anz);
	void operator= (Vektor& vektor1);
	friend Vektor operator+ (Vektor& vektor1, Vektor& vektor2);
	friend Vektor operator* (Vektor& vektor1, Vektor& vektor2);
	Vektor(Vektor& ini);
	//operator const char *();
	void ausgabe();

};
class VektorFehler : exception
{
public:
	VektorFehler() : exception("Die Gr\224sse der Vektoren m\201ssen identisch sein."){};
};

Vektor operator+ (Vektor& vektor1, Vektor& vektor2);
Vektor operator* (Vektor& vektor1, Vektor& vektor2);

Vektor.cpp
Code:
#include "Vektor.h"

Vektor::Vektor(double* vektor, int anz)
{
	this->anz = anz;
	this->vektor = new double[anz];

}

void Vektor::operator= (Vektor& vektor1)
{
	int i;
	for(i=0;i<anz;i++)
		this->vektor[i] = vektor1.vektor[i];
}

Vektor::Vektor(Vektor& ini)
{
	
	anz = ini.anz;
	vektor = new double[anz];
	for (int i=0;i<anz;i++)
		vektor[i] = ini.vektor[i];
}

Vektor operator+ (Vektor& vektor1, Vektor& vektor2)
{
	if(vektor1.anz != vektor2.anz)
		throw new VektorFehler();

	int speicher, speicher1;
	double* vek;
	speicher = vektor1.anz;
	speicher1 = vektor1.anz+vektor2.anz;
	vek = new double[vektor1.anz];
	for(int i=0;i<vektor1.anz;i++)
		vek[i] = vektor1.vektor[i]+vektor2.vektor[i];
	return Vektor(vek, vektor1.anz);
}

Vektor operator* (Vektor& vektor1, Vektor& vektor2)
{
	if(vektor1.anz != vektor2.anz)
		throw new VektorFehler();

	int speicher, speicher1;
	double* vek;
	speicher = vektor1.anz;
	speicher1 = vektor1.anz+vektor2.anz;
	vek = new double[speicher1];
	for(int i=0;i<speicher1;i++)
		vek[i] = vektor1.vektor[i]*vektor2.vektor[i+speicher];
	return Vektor(vek, speicher1);
}

/*Vektor::operator const char *()
{
	string vek;
	char vek2[1000];
	for (int i = 0;i<anz;i++)
		itoa(vektor[i],vek2[i],10);

	return vek.c_str();
}*/

void Vektor::ausgabe()
{
	for(int i = 0;i<anz;i++)
	cout << vektor[i];
}

LG Flo
 
Zuletzt bearbeitet:
Habe das gleiche auch mal gemacht. Allerdings für Matrizen denk das hilft dir :)
Hier meine Lösung:

Code:
friend std::ostream & operator<< (std::ostream & os, const Matrix<T> & mat)
	{
		for (size_t i = 0; i < mat.rowCount_; ++i){
			for (size_t j = 0; j < mat.colCount_; ++j)
				os << mat(i, j) << "\t";
			os << std::endl;
		}

		return os;
	}

War bei mir allerdings in der .h auch implementiert. Wichtig ist halt, dass du wieder nen ostream returnst damit sowas wie std::cout << vector << "bla"; funktioniert :)
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben