本题要求定义一个二维向量类Vec2,类的声明见给出的代码,请给出类的完整实现,并通过测试程序。类的声明包括如下内容:
- 数据成员,向量的第一维u和第二维v;
- u和v的访问函数;
- 构造函数;
- 加号、减号运算符重载(遵守二维向量的运算规则);
- ==和!=运算符重载(遵守二维向量的运算规则)
- 输入、输出运算符重载。
类实现代码需要补充构造函数以及加、不等、输入输出运算。
类的声明:
class Vec2{
private:
double u;
double v;
public:
Vec2(double u=0,double v=0);
double getU() const;
double getV() const;
Vec2 operator+(const Vec2&b);
friend Vec2 operator-(const Vec2&a,const Vec2&b);
bool operator==(const Vec2&b) const;
friend bool operator!=(const Vec2&a,const Vec2&b);
friend ostream&operator<<(ostream&os,const Vec2&c);
friend istream&operator>>(istream&is,Vec2&c);
};
测试程序:
#include<iostream>
using namespace std;
class Vec2{
private:
double u;
double v;
public:
Vec2(double u=0,double v=0);
double getU() const;
double getV() const;
Vec2 operator+(const Vec2&b);
friend Vec2 operator-(const Vec2&a,const Vec2&b);
bool operator==(const Vec2&b) const;
friend bool operator!=(const Vec2&a,const Vec2&b);
friend ostream&operator<<(ostream&os,const Vec2&c);
friend istream&operator>>(istream&is,Vec2&c);
};
double Vec2::getU() const
{
return u;
}
double Vec2::getV() const
{
return v;
}
Vec2 operator-(const Vec2&a,const Vec2&b){
return Vec2(a.u-b.u,a.v-b.v);
}
bool Vec2::operator==(const Vec2&b) const{
return u==b.u&&v==b.v;
}
/* 请在这里填写答案 */
int main(){
Vec2 a;
cin>>a;
cout<<"a: "<<a<<endl;
Vec2 b(3,4);
Vec2 c=a+b;
cout<<"c: "<<c<<endl;
Vec2 d=a-b;
cout<<"d: "<<d<<endl;
cout<<"a==a: "<<(a==a)<<endl;
cout<<"a!=a: "<<(a!=a)<<endl;
return 0;
}
测试程序的输入:
10 5
测试程序的输出:
a: u=10,v=5
c: u=13,v=9
d: u=7,v=1
a==a: 1
a!=a: 0
注意:“:”和“,”为英文,“:”后有一个空格
提示
下列代码为类实现的骨架代码
Vec2::Vec2(double u,double v){
//代码
}
Vec2 Vec2::operator+(const Vec2&b){
//代码
}
bool operator!=(const Vec2&a,const Vec2&b)
{
//代码
}
ostream&operator<<(ostream&os,const Vec2&c){
//代码
}
istream&operator>>(istream&is,Vec2&c){
//代码
}
参考答案:
Vec2::Vec2(double a,double b){
u = a;
v = b;
//代码
}
Vec2 Vec2::operator+(const Vec2&b){
Vec2 c;
c.u = this->u + b.u;
c.v = this->v + b.v;
return c;
}
bool operator!=(const Vec2&a,const Vec2&b)
{
if (a.u!=b.u||a.v!=b.v) return 1;
else return 0;
//代码
}
ostream&operator<<(ostream&os,const Vec2&c){
//代码
os << "u=" <<c.getU()<<"," << "v="<<c.getV();
}
istream&operator>>(istream&is,Vec2&c){
is>>c.u>>c.v;
//代码
}