Klassen-Template für die Realisierung von Punkt-Objekten

amine89

Mitglied
Guten Tag zusammen,

ich habe mich heute zum ersten mal mit dem Thema Template in C++ beschäftigt und habe vorhin ein kleines Problem Bei der

Ausführung des Programms gehabt, ich weiss aber garnicht woran das liegt...

Es wäre sehr nett , wenn mir jmd dabei helfen kann.

Danke :)

Hier ist meine Quelldatei :

C++:
#include <iostream>
#include <cmath>


using namespace std;

template<typename T> class Point {
	private:
		T x;
		T y;
		
	public:
    
    	Point(){
			T x = 0;
			T y = 0;
		}
    	Point(T px, T py){
			x = px;
			y = py;
		}
 
    	~Point() { }
    	
    	double distanceTo(Point *p) {
			if ( p )
				return sqrt( (x - p->x) * (x - p->x) + (y - p->y) * (y - p->y) ) ;
			else 
				return -1 ;
		}
};
 
int main() {
  Point<int>*pInt1;
  Point<int>*pInt2;
  pInt1=   Point (0,0);
  pInt2 =  Point (3,4);
  
  cout << "Abstand: " << pInt1->distanceTo(pInt2) << endl;
  
  delete pInt1;
  delete pInt2;
  
  return 0;
}
 
Hi.

Wieso bei der Ausführung? Dein Programm wird nicht kompiliert.

delete und new sollten immer paarweise auftreten.

Du solltest aber nicht soviel mit Zeigern arbeiten. Nutze besser konstante Referenzen.

C++:
double distanceTo(const Point<T>& other) const {
  if (this == &other) return 0.0;
  else {
     ...
  }
}

Und in main dann einfach
C++:
Point<int> p1(0, 0);
Point<int> p2(3, 4);

p1.distanceTo(p2);

Ein weiterer Fehler:

C++:
Point(){
            T x = 0;
            T y = 0;
        }
Du legst hier im Konstruktor 2 lokale Variablen an. Diese stehen in keinem Zusammenhang zu den privaten Attributen der Klasse!

Grundsätzlich ist es besser die Initialisierungsliste zu verwenden. Du kannst dann Standardwerte des jeweiligen Typs zuweisen:
C++:
Point()
: x(T()), y(T())
{}
 
viel Dank . es hat geklappt .
ich meinte auch, dass das Programm nicht kompiliert wird.
so sieht jetzt mein Programm aus :
C++:
#include <iostream>
#include <cmath>


using namespace std;

template<typename T> class Point {
	
	public:
    	T x;
		T y;
    	
			Point()
               : x(T()), y(T())
               {}

    	Point(T px, T py){
			x = px;
			y = py;
		}
 
    	~Point() { }
    	
    double distanceTo(const Point<T>& p) const {
    	
       if (this == &p) return 0.0;
          else {
				return sqrt( (x -   p.x) * (x - p.x) + (y - p.y) * (y - p.y) ) ;
			}
	}

};
int main() {
	
Point<int> p1(0, 0);
Point<int> p2(3, 4);
 

  cout << "Abstand: " << p1.distanceTo(p2)<< endl;
  
  return 0;
}

Danke schön noch mal und schönen Abend noch wünsche ich !
 
Zurück