C++-manual | ||
---|---|---|
Förutgående | Nästa |
Detta appendix innehåller diverse kompletta kodlistor för klasser och program som skrivits i de olika kapitlen.
Denna klass användes i Kapitel 21. Definitionsfilen Vector.h:
#ifndef VECTOR_H #define VECTOR_H #include <iostream> #include <math.h> class Vector { public: // konstruktorer Vector (); Vector (const Vector & V); Vector (const float X, const float Y, const float Z); // accessera individuella komponenter void setX (const float X) { m_X = X; }; void setY (const float Y) { m_Y = Y; }; void setZ (const float Z) { m_Z = Z; }; float x () const { return m_X; }; float y () const { return m_Y; }; float z () const { return m_Z; }; // get the length of the vector float length () const; // överlagrade operatorer Vector operator+ (const Vector & V) const; void operator+= (const Vector & V); Vector operator- (const Vector & V) const; Vector operator- () const; Vector operator* (const float S) const; bool operator== (const Vector & V) const; bool operator!= (const Vector & V) const; Vector & operator= (const Vector & V); // friend-funktioner friend Vector operator* (const float S, const Vector & V); friend ostream & operator<< (ostream & Stream, const Vector & V); friend istream & operator>> (istream & Stream, Vector & V); private: // x, y och z-komponenterna float m_X; float m_Y; float m_Z; }; #endif // VECTOR_H |
Implementationsfilen Vector.cpp:
#include "Vector.h" // tom konstruktor Vector::Vector () { // nollställ alla medlemmar m_X = 0; m_Y = 0; m_Z = 0; } // copy-konstruktor Vector::Vector (const Vector & V) { // kopiera data från 'V' m_X = V.m_X; m_Y = V.m_Y; m_Z = V.m_Z; } // skapa från separata värden Vector::Vector (const float X, const float Y, const float Z) { // spara värden i medlemmar m_X = X; m_Y = Y; m_Z = Z; } // beräkna längden av vektorn float Vector::length () const { // använd Pythagoras return sqrt ( m_X * m_X + m_Y * m_Y + m_Z * m_Z ); } // överlagrade operatorn '+' Vector Vector::operator+ (const Vector & V) const { Vector Result; // sätt den nya vektorns värden Result.setX ( m_X + V.m_X ); Result.setY ( m_Y + V.m_Y ); Result.setZ ( m_Z + V.m_Z ); // returnera den nya vektorn return Result; } // överlagrade '+=' void Vector::operator+= (const Vector & V) { m_X += V.m_X; m_Y += V.m_Y; m_Z += V.m_Z; } // överlagrade binära operatorn '-' Vector Vector::operator- (const Vector & V) const { Vector Result; // sätt den nya vektorns värden Result.setX ( m_X - V.m_X ); Result.setY ( m_Y - V.m_Y ); Result.setZ ( m_Z - V.m_Z ); // returnera den nya vektorn return Result; } // överlagrade unära operatorn '-' Vector Vector::operator- () const { Vector Result; // sätt den nya vektorns värden Result.setX ( -m_X ); Result.setY ( -m_Y ); Result.setZ ( -m_Z ); // returnera den nya vektorn return Result; } // överlagrade binära '*' Vector Vector::operator* (const float S) const { Vector Result; // sätt den nya vektorns värden Result.setX ( m_X * S ); Result.setY ( m_Y * S ); Result.setZ ( m_Z * S ); // returnera den nya vektorn return Result; } // överlagrade operatorn '==' bool Vector::operator== (const Vector & V) const { // jämför V1 och denna vektor if ( m_X == V.m_X && m_Y == V.m_Y && m_Z == V.m_Z ) { // vektorerna är lika return true; } // de är olika return false; } // överlagrade operatorn '!=' bool Vector::operator!= (const Vector & V) const { // använd negerad jämförelse return ! ( *this == V ); } // överlagrade '=' Vector & Vector::operator= (const Vector & V) { // tilldelas vi värdet av oss själva? if ( this == &V ) { // jep, gör inget i så fall return *this; } // utför tilldelning m_X = V.m_X; m_Y = V.m_Y; m_Z = V.m_Z; // returnera oss själva return *this; } // extern funktion för överlagrad '*' Vector operator* (const float S, const Vector & V) { // använd tidigare överlagrad operator '*' return V * S; } // extern funktion för överlagrad '<<' ostream & operator<< (ostream & Stream, const Vector & V) { // skriv ut till den stream vi fått som parameter Stream << V.x () << ' ' << V.y () << ' ' << V.z () << ' '; // returnera streamen return Stream; } // extern funktion för överlagrad '>>' istream & operator>> (istream & Stream, Vector & V) { // skriv ut till den stream vi fått som parameter Stream >> V.m_X >> V.m_Y >> V.m_Z; // returnera streamen return Stream; } |
Förutgående | Hem | Nästa |
I/O på låg nivå | Referenser |