描述
构造一个模板类(Vector),数据成员如下:
template<typename T>
class Vector
{
private:
T x, y, z;
};
完成Vector,并用以下函数测试
int main()
{
double a, b, c;
std::cin >> a >> b >> c;
Vector<double> v1(a, b, c), v2(v1), v3, v4;
double d;
std::cin >> d;
v4 = d * v1 + v2;
std::cout << v4 <<std::endl;
Vector<double> v;
std::cin >> v;
int flag = (v4 == v);
std::cout << flag << std::endl;
return 0;
}
我的代码:
#include <iostream>
template <typename type> class Vector
{
public:
Vector();
~Vector();
Vector(type x, type y, type z);
Vector(Vector<type> &vec);
private:
type x, y, z;
template<typename type> friend Vector<type> operator*(type c, Vector<type> vec);
template<typename type> friend Vector<type> operator*(const Vector<type> vec, const type c);
template<typename type> friend Vector<type> operator+(const Vector<type> vec1, const Vector<type> vec2);
template<typename type> friend bool operator==(const Vector<type> vec1, const Vector<type> vec2);
template<typename type> friend std::ostream &operator<<(std::ostream &os, const Vector<type> vec);
template<typename type> friend std::istream &operator>>(std::istream &is,Vector<type> vec);
};
#pragma region
template<typename type> Vector<type>::Vector()
{
}
template<typename type> Vector<type>::~Vector()
{
}
template<typename type> Vector<type>::Vector(type x, type y, type z)
{
Vector<type>::x = x;
Vector<type>::y = y;
Vector<type>::z = z;
}
template<typename type> Vector<type>::Vector(Vector<type>& vec)
{
Vector<type>::x = vec.x;
Vector<type>::y = vec.y;
Vector<type>::z = vec.z;
}
template<typename type> Vector<type> operator*(const type c, const Vector<type> vec)
{
Vector<type> ans;
ans.x = vec.x *c;
ans.y = vec.y *c;
ans.z = vec.z *c;
return ans;
}
template<typename type> Vector<type> operator*(const Vector<type> vec, const type c)
{
Vector<type> ans;
ans.x = vec.x *c;
ans.y = vec.y *c;
ans.z = vec.z *c;
return ans;
}
template<typename type> Vector<type> operator+(const Vector<type> vec1, const Vector<type> vec2)
{
Vector<type> ans;
ans.x = vec1.x + vec2.x;
ans.y = vec1.y + vec2.y;
ans.z = vec1.z + vec2.z;
return ans;
}
template<typename type> bool operator==(const Vector<type> vec1, const Vector<type> vec2)
{
if (vec1.x != vec2.x || vec1.y != vec2.y || vec1.z != vec2.z)
{
return true;
}
else
{
return false;
}
}
template<typename type> std::ostream &operator<<(std::ostream &os,const Vector<type> vec)
{
return os<< vec.x << " " << vec.y << " " << vec.z << std::endl;
}
template<typename type> std::istream &operator>>(std::istream &is, Vector<type> vec)
{
return is >> vec.x >> vec.y >> vec.z;
}
#pragma endregion
int main()
{
double a, b, c;
std::cin >> a >> b >> c;
Vector<double> v1(a, b, c), v2(v1), v3, v4;
double d;
std::cin >> d;
v4 = d * v1 + v2;
std::cout << v4 << std::endl;
Vector<double> v;
std::cin >> v;
int flag = (v4 == v1);
std::cout << flag << std::endl;
return 0;
}