Przeciążanie operatorów - klasa wektor

hm. Tu jest moja wesoła twórczość na temat działania na wektorach w przestrzeni 3D.
Ewentualne poprawki/błędy proszę zgłaszać ;p wrzucę jeszcze inną wersję tego programu, bez wskaźnika ;p
klik:


Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<class T>
  5. class Wektor3 {
  6. private:
  7. T* w;
  8.  
  9. public:
  10. // konstruktor
  11. Wektor3(T x=0, T y=0, T z=0) {
  12. w = new T[3];
  13. w[0] = x;
  14. w[1] = y;
  15. w[2] = z;
  16. }
  17.  
  18. // destruktor
  19. ~Wektor3() { delete [] w; }
  20.  
  21. // metody
  22. double getX() const {
  23. return w[0];
  24. }
  25. double getY() const {
  26. return w[1];
  27. }
  28. double getZ() const {
  29. return w[2];
  30. }
  31.  
  32. // PRZECIAZANIE OPERATOROW:
  33.  
  34. // dodawanie
  35. Wektor3& operator+(const Wektor3& v) {
  36. Wektor3* s = new Wektor3;
  37. s->w[0] = w[0] + v.w[0];
  38. s->w[1] = w[1] + v.w[1];
  39. s->w[2] = w[2] + v.w[2];
  40. return *s;
  41. }
  42.  
  43. // odejmowanie
  44. Wektor3& operator-(const Wektor3& v) {
  45. Wektor3* s = new Wektor3;
  46. s->w[0] = w[0] - v.w[0];
  47. s->w[1] = w[1] - v.w[1];
  48. s->w[2] = w[2] - v.w[2];
  49. return *s;
  50. }
  51.  
  52. // iloczyn skalarny
  53. double operator*(Wektor3& v) {
  54. return w[0]*v.w[0]+w[1]*v.w[1]+w[2]*v.w[2];
  55. }
  56.  
  57. // iloczyn wektorowy
  58. Wektor3& operator&(const Wektor3& v) {
  59. Wektor3* s = new Wektor3;
  60. s->w[0] = w[1]*v.w[2]-w[2]*v.w[1];
  61. s->w[1] = w[2]*v.w[0]-w[0]*v.w[2];
  62. s->w[2] = w[0]*v.w[1]-w[1]*v.w[0];
  63. return *s;
  64. }
  65.  
  66. // mnozenie z prawej
  67. Wektor3& operator*(double d) {
  68. Wektor3* s = new Wektor3;
  69. s->w[0] = w[0]*d;
  70. s->w[1] = w[1]*d;
  71. s->w[2] = w[2]*d;
  72. return *s;
  73. }
  74.  
  75. // mnozenie z lewej;
  76.  
  77. friend Wektor3& operator*(T d, Wektor3& v){
  78. Wektor3* s = new Wektor3;
  79. s->w[0] = v.w[0]*d;
  80. s->w[1] = v.w[1]*d;
  81. s->w[2] = v.w[2]*d;
  82. return *s;
  83. }
  84.  
  85. // przeciazony operator "<<"
  86. friend ostream& operator<<(ostream& e, const Wektor3& v) {
  87. cout << "wektor: x=" << v.getX() << "; y=" << v.getY()
  88. << "; z=" << v.getZ();
  89. return e;
  90. }
  91.  
  92. //wprowadzanie
  93. friend istream& operator>>(istream& i, const Wektor3& v){
  94. i>>v.w[0]>>v.w[1]>>v.w[2];
  95. return i;
  96. }
  97.  
  98. };
  99.  
  100.  
  101.  
  102.  
  103. int main() {
  104. float n;
  105. Wektor3<float> a;
  106. cout<<"podaj wspolrzedne a: \n";
  107. cin>>a;
  108.  
  109.  
  110. Wektor3<float> b;
  111.  
  112. cout<<"podaj wspolrzedne b: \n";
  113. cin>>b;
  114. cout << "Utworzony b: \n" << b << endl;
  115. cout << "Utworzony a: \n" << a << endl;
  116.  
  117.  
  118. cout << "Suma a+b: " << (a+b) << endl;
  119. cout << "Roznica a-b: " << (a-b) << endl;
  120. cout << "Iloczyn skalarny a*b: "
  121. << (a*b) << endl;
  122. cout << "Iloczyn wektorowy : " << (a&b) << endl;
  123.  
  124. cout<<"\n\nprzez jaka liczbe pomnozyc wektory?\n"<<"podaj n: ";
  125. cin>>n;
  126. cout << "Iloczyn "<<n<<"*a: " << (n*a ) << endl;
  127. cout << "Iloczyn b*"<<n<<": " <<(b*n ) << endl;
  128.  
  129. system("pause");
  130. return 0;
  131. }

Komentarze

Popularne posty z tego bloga

[c++] Lista wskaznikowa

[c++] słowniki - haszowanie - haszowanie otwarte

[ANSI C][LINUX] Wysyłanie i obsługa sygnałów