3维向量类Vector3
Vector3.h:
#pragma once
#include <iostream>
class Vector3
{
private:
double x;
double y;
double z;
public:
Vector3();
Vector3(double x, double y, double z);
Vector3(const Vector3 &v);
double X(void) const{ return x; }
double Y(void) const{ return y; }
double Z(void) const{ return z; }
double norm(void) const;
void normalize(void);
Vector3 operator+(const Vector3 &v) const;
Vector3 operator-(const Vector3 &v) const;
Vector3 operator*(const double n) const;
Vector3 operator/(const double n) const;
Vector3 & operator=(const Vector3 &v);
friend Vector3 operator*(const double n, const Vector3 &v);
friend std::ostream & operator<<(std::ostream &os, const Vector3 &v);
~Vector3();
};
Vector3.cpp:
#include <cmath>
#include "Vector3.h"
Vector3::Vector3()
{
x = y = z = 0.0;
}
Vector3::Vector3(double X,double Y,double Z)
{
x = X; y = Y; z = Z;
}
Vector3::Vector3(const Vector3 &v)
{
x = v.x; y = v.y; z = v.z;
std::cout << "copy constructor called" << std::endl;
}
void Vector3::normalize(void)
{
double norm;
norm = sqrt(x*x + y*y + z*z);
x = x / norm;