Vector and Shape class added
This commit is contained in:
parent
49cc258358
commit
c7f524ca68
|
@ -0,0 +1,181 @@
|
||||||
|
#pragma once
|
||||||
|
#include <array>
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
#include <iostream>
|
||||||
|
class Cube {
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Cube(double A=0, double B=0, double C=0) :
|
||||||
|
m_A(A), m_B(B), m_C(C)
|
||||||
|
{
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double GetVolume() { return m_Volume; }
|
||||||
|
std::array<double, 3> GetAll()
|
||||||
|
{
|
||||||
|
std::array<double, 3> tmp ;
|
||||||
|
tmp[0] = m_A;
|
||||||
|
tmp[1] = m_B;
|
||||||
|
tmp[2] = m_C;
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
void SetAll(double _A, double _B, double _C) {
|
||||||
|
m_A = _A;
|
||||||
|
m_B = _B;
|
||||||
|
m_C = _C;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
void SetA(double x) {
|
||||||
|
m_A = x;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
void SetB(double x) {
|
||||||
|
m_B = x;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
void SetC(double x) {
|
||||||
|
m_C = x;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
const double& GetA() {
|
||||||
|
return m_A;
|
||||||
|
}
|
||||||
|
const double& GetB() {
|
||||||
|
return m_B;
|
||||||
|
}
|
||||||
|
const double& GetC() {
|
||||||
|
return m_C;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
void EvalVolume() {
|
||||||
|
m_Volume = m_A * m_B * m_C;
|
||||||
|
|
||||||
|
}
|
||||||
|
double m_A, m_B, m_C, m_Volume;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::ostream& operator<< (std::ostream& out, Cube& a)
|
||||||
|
{
|
||||||
|
|
||||||
|
out << "Cube("<< a.GetA() ;
|
||||||
|
out << ',' << a.GetB();
|
||||||
|
out << ',' << a.GetC();
|
||||||
|
out << ")";
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Sphere
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
Sphere(double Radious=0)
|
||||||
|
{
|
||||||
|
m_Radious = Radious;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
double GetRadious() { return m_Radious; }
|
||||||
|
double GetVolume() { return m_Volume; }
|
||||||
|
void SetRaious(double Radious)
|
||||||
|
{
|
||||||
|
m_Radious = Radious;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
void EvalVolume() {
|
||||||
|
m_Volume = (4*M_PI/3) * m_Radious* m_Radious * m_Radious;
|
||||||
|
|
||||||
|
}
|
||||||
|
double m_Radious;
|
||||||
|
double m_Volume;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::ostream& operator<< (std::ostream& out, Sphere& a)
|
||||||
|
{
|
||||||
|
|
||||||
|
out << "Sphere(" << a.GetRadious() << ')';
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Cylinder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Cylinder(double Height=0 , double Radious=0)
|
||||||
|
:m_Height(Height),m_Radious(Radious)
|
||||||
|
{
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
double GetHeight() { return m_Height; }
|
||||||
|
double GetRadious() { return m_Radious; }
|
||||||
|
void SetRadious(double Radious)
|
||||||
|
{
|
||||||
|
m_Radious = Radious;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
void SetHeight(double Height)
|
||||||
|
{
|
||||||
|
m_Height = Height;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
void EvalVolume()
|
||||||
|
{
|
||||||
|
m_Volume = M_PI * m_Radious * m_Radious * m_Height;
|
||||||
|
}
|
||||||
|
double m_Height, m_Radious;
|
||||||
|
double m_Volume;
|
||||||
|
|
||||||
|
};
|
||||||
|
std::ostream& operator<< (std::ostream& out, Cylinder& a)
|
||||||
|
{
|
||||||
|
|
||||||
|
out << "Cylinder(" << a.GetHeight() << ',' << a.GetRadious() << ')';
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
class Pyramid
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Pyramid(double Height=0, double Width=0)
|
||||||
|
{
|
||||||
|
m_Height = Height;
|
||||||
|
m_Width = Width;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
double GetHeight() { return m_Height; }
|
||||||
|
double GetWidth() { return m_Width; }
|
||||||
|
void SetWidth(double Width)
|
||||||
|
{
|
||||||
|
m_Width = Width;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
void SetHeight(double Height)
|
||||||
|
{
|
||||||
|
m_Height = Height;
|
||||||
|
EvalVolume();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
void EvalVolume()
|
||||||
|
{
|
||||||
|
m_Volume = (m_Width * m_Width * m_Height) / 3;
|
||||||
|
}
|
||||||
|
double m_Width, m_Height;
|
||||||
|
double m_Volume;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::ostream& operator<< (std::ostream& out, Pyramid& a)
|
||||||
|
{
|
||||||
|
|
||||||
|
out << "Cylinder(" << a.GetHeight()<<',' << a.GetWidth() << ')';
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
#pragma once
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class Vector
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
Vector(unsigned int Size=0,T init=NULL);
|
||||||
|
void Resize(unsigned int newSize,T init=NULL);
|
||||||
|
void PushBack(T a);
|
||||||
|
~Vector();
|
||||||
|
|
||||||
|
unsigned int GetSize() { return m_size; };
|
||||||
|
|
||||||
|
T& operator[](int index);
|
||||||
|
private:
|
||||||
|
|
||||||
|
unsigned int m_size;
|
||||||
|
T* m_data =nullptr;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Vector<T>::Vector(unsigned int Size, T init )
|
||||||
|
:m_size(Size)
|
||||||
|
{
|
||||||
|
m_data = new T[m_size];
|
||||||
|
for (size_t i = 0; i < m_size; i++)
|
||||||
|
{
|
||||||
|
m_data[i] = init;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Vector<T>::Resize(unsigned int newSize,T init)
|
||||||
|
{
|
||||||
|
if (newSize == m_size) return;
|
||||||
|
|
||||||
|
T* temp = m_data;
|
||||||
|
m_data = new T[newSize];
|
||||||
|
|
||||||
|
for (size_t i = 0; i < newSize; i++)
|
||||||
|
{
|
||||||
|
if (i < m_size) m_data[i] = temp[i];
|
||||||
|
else m_data[i] = init;
|
||||||
|
}
|
||||||
|
m_size = newSize;
|
||||||
|
delete[] temp;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Vector<T>::PushBack(T a)
|
||||||
|
{
|
||||||
|
Resize(m_size + 1);
|
||||||
|
m_data[m_size-1] = a;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Vector<T>::~Vector()
|
||||||
|
{
|
||||||
|
delete[] m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
T& Vector<T>::operator[](int index)
|
||||||
|
{
|
||||||
|
if (index >= m_size) {
|
||||||
|
std::cout << "Array index out of bound, exiting";
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
return m_data[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
std::ostream& operator<< (std::ostream& out, Vector<T>& a)
|
||||||
|
{
|
||||||
|
|
||||||
|
unsigned int len = a.GetSize();
|
||||||
|
|
||||||
|
for (size_t i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
out << a[i] ;
|
||||||
|
if (i < len - 1) out << ',';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue