邯郸学校网站建设价格,wordpress 转小程序,小程序定制语言,3d建模软件推荐目录1、明确要实现的类的方法以及成员函数2、假设已经编写Vec2D#xff0c;根据要求#xff0c;写出测试代码3、编写平面向量类Vec2D,并进行测试4、完整代码5、最终结果1、明确要实现的类的方法以及成员函数
考虑到效率问题#xff0c;我们一般将函数的参数设置为引用类型。… 目录1、明确要实现的类的方法以及成员函数2、假设已经编写Vec2D根据要求写出测试代码3、编写平面向量类Vec2D,并进行测试4、完整代码5、最终结果 1、明确要实现的类的方法以及成员函数
考虑到效率问题我们一般将函数的参数设置为引用类型。 函数参数类型设置为引用类型的一个重要目的是避免对象拷贝的开销。 2、假设已经编写Vec2D根据要求写出测试代码
遵循TDD的原则 本部分要展示的内容如下 假定平面向量类Vec2D已经编写完 在main函数中测试Vec2D中的各种函数. 在源文件中写入测试代码
include iostreamusing std::cout;
using std::endl;int main()
{//创建向量对象Vec2D v1{ 3,5 }, v2{ 4,6 };//向量转为字符串cout v1 v1.toString() endl;cout v2 v2.toString() endl;//向量加法: 向量 向量 向量 数Vec2D v3 v1.add(v2);Vec2D v4 v3.add(10.0);cout v2 v3.toString() endl;cout v3 v4.toString() endl;//向量减法向量点积向量数乘Vec2D v5 v2.subtract(v1);double v6 v2.dot(v1); //两个向量的点积是一个数Vec2D v7 v3.multiply(2.1);cout v2 - v1 v5.toString() endl;cout v2 * v1 v6 endl;cout v3 * 2.1 v7.toString() endl;//向量求负值Vec2D v8 v2.negative();cout -v2 v8.toString() endl;//向量自增/自减cout v8 v8.increase().toString() endl;cout --v2 v2.decrease().toString() endl;//读取或者修改向量元素cout v1.x_ v1.at(0) endl;cout v1.y_ v1.at(1) endl;//向量的长度magnitude 和角度directioncout v1.magnitude v1.magnitude() endl;cout v1.direction v1.direction() endl;//比较两个向量cout v1 compare v2 : v1.compareTo(v2) endl;return 0;
}由于Vec2D类还没有进行编写这个测试程序显然是无法运行通过的。
3、编写平面向量类Vec2D,并进行测试
1、添加类 这里使用VS2019中的类向导来添加类视图 - 类视图 - 选择项目右键 - 类向导 - 添加类 2、添加类成员变量 返回类向导 - 成员变量- 添加自定义 添加x_,y_,类型均未double均为private. 3、添加方法注意这里的同名重载函数是不可以添加的需要后面手动添加 举个例子
4、补充需要重载的函数以及遗漏的函数
add这里还有另外一个重载函数与数值相加,同理subtract也有重载函数。
//cpp
//与数值相加
Vec2D Vec2D::add(double num)
{// TODO: 在此处添加实现代码.return Vec2D();
}
//h//与数值相加Vec2D add(double num);补充遗漏的头文件
#include iostream
#include string
#include cmath
#include exception5、完善每个成员函数的具体内容并且对格式稍作修改
4、完整代码
Vec2D.h
#pragma once
#include iostream
#include string
#include cmath
#include exception
class Vec2D
{
private:double x_;double y_;
public:Vec2D();Vec2D(double , double );~Vec2D();// 将向量转换为字符串表达形式std::string toString();// 向量加法Vec2D add(Vec2D secondVec2D);//与数值相加Vec2D add(double num);// 读取或修改向量元素double at(const int index);// 向量减法Vec2D subtract(Vec2D secondVec2D);//与数值相减Vec2D subtract(double num);// 向量点积double dot(Vec2D secondVec2D);// 向量数乘Vec2D multiply(double multiplier);// 向量求负值Vec2D negative();// 向量自增1Vec2D increase();// 向量自减1Vec2D decrease();// 求向量的范数(长度)double magnitude();// 求Vec2D与x轴的夹角double direction();// 比较两个向量的长度。如果firstVec2D小于secondVec2D返回-1若大于则返回1若相等则返回0int compareTo(Vec2D secondVec2D);
};
Vec2D.cpp
#include Vec2D.h
Vec2D::Vec2D() {x_ 0.0;y_ 0.0;
}Vec2D::Vec2D(double x, double y) {x_ x;y_ y;
}Vec2D::~Vec2D() {}// 将向量转换为字符串表达形式
std::string Vec2D::toString()
{// TODO: 在此处添加实现代码.return std::string(( std::to_string(x_) , std::to_string(y_) ));
}// 向量加法
Vec2D Vec2D::add(Vec2D secondVec2D)
{// TODO: 在此处添加实现代码.return Vec2D(x_ secondVec2D.x_ , y_ secondVec2D.y_);
}
//与数值相加
Vec2D Vec2D::add(double num)
{// TODO: 在此处添加实现代码.return Vec2D(this-x_ num , this-y_ num);
}// 向量减法
Vec2D Vec2D::subtract(Vec2D secondVec2D)
{// TODO: 在此处添加实现代码.return Vec2D(x_ - secondVec2D.x_ , y_ - secondVec2D.y_);
}
// 向量减数
Vec2D Vec2D::subtract(double num)
{// TODO: 在此处添加实现代码.return Vec2D(this-x_ - num , this-y_ - num);
}// 向量点积
double Vec2D::dot(Vec2D secondVec2D)
{// TODO: 在此处添加实现代码.return (x_ * secondVec2D.x_ y_ * secondVec2D.y_);
}// 向量数乘
Vec2D Vec2D::multiply(double multiplier)
{// TODO: 在此处添加实现代码.return Vec2D(x_ * multiplier ,y_ * multiplier);
}// 向量求负值
Vec2D Vec2D::negative()
{// TODO: 在此处添加实现代码.return Vec2D( -x_ , -y_);
}// 向量自增1
Vec2D Vec2D::increase()
{x_;y_;// TODO: 在此处添加实现代码.return (*this);
}// 向量自减1
Vec2D Vec2D::decrease()
{x_--;y_--;// TODO: 在此处添加实现代码.return (*this);
}// 求向量的范数(长度)
double Vec2D::magnitude()
{// TODO: 在此处添加实现代码.return sqrt(x_ * x_ y_ * y_);
}// 求Vec2D与x轴的夹角
double Vec2D::direction()
{// TODO: 在此处添加实现代码.return atan(y_ / x_);
}// 比较两个向量的长度。如果firstVec2D小于secondVec2D返回-1若大于则返回1若相等则返回0
int Vec2D::compareTo(Vec2D secondVec2D)
{// TODO: 在此处添加实现代码.double m1 this-magnitude();double m2 secondVec2D.magnitude();if(abs(m1 - m2) 1e-10)return 0;elsereturn (m1 m2 ? 1 : -1);
}// 读取或修改向量元素
double Vec2D::at(const int index)
{if( 0 index)return x_;else if(1 index)return y_;//使用异常处理的方式抛出异常并且打印携带信息elsethrow std::out_of_range(at() only accept 1 or 2 as parameter);// TODO: 在此处添加实现代码.// TODO: 在此处插入 return 语句
}main.cpp
#include iostream
#include Vec2D.h
using std::cout;
using std::endl;int main()
{//创建向量对象Vec2D v1{ 3,5 }, v2{ 4,6 };//向量转为字符串cout v1 v1.toString() endl;cout v2 v2.toString() endl;//向量加法: 向量 向量 向量 数Vec2D v3 v1.add(v2);Vec2D v4 v3.add(10.0);cout v2 v3.toString() endl;cout v3 v4.toString() endl;//向量减法向量点积向量数乘Vec2D v5 v2.subtract(v1);double v6 v2.dot(v1); //两个向量的点积是一个数Vec2D v7 v3.multiply(2.1);cout v2 - v1 v5.toString() endl;cout v2 * v1 v6 endl;cout v3 * 2.1 v7.toString() endl;//向量求负值Vec2D v8 v2.negative();cout -v2 v8.toString() endl;//向量自增/自减cout v8 v8.increase().toString() endl;cout --v2 v2.decrease().toString() endl;//读取或者修改向量元素cout v1.x_ v1.at(0) endl;cout v1.y_ v1.at(1) endl;//向量的长度magnitude 和角度directioncout v1.magnitude v1.magnitude() endl;cout v1.direction v1.direction() endl;//比较两个向量cout v1 compare v2 : v1.compareTo(v2) endl;return 0;
}5、最终结果 v1 (3.000000, 5.000000) v2 (4.000000, 6.000000) v2 (7.000000, 11.000000) v3 (17.000000, 21.000000) v2 - v1 (1.000000, 1.000000) v2 * v1 42 v3 * 2.1 (14.700000, 23.100000) -v2 (-4.000000, -6.000000) v8 (-3.000000, -5.000000) –v2 (3.000000, 5.000000) v1.x_ 3 v1.y_ 5 v1.magnitude 5.83095 v1.direction 1.03038 v1 compare v2 :0