Problem1590--C++练习题2

1590: C++练习题2

[Creator : ]
Time Limit : 60.000 sec  Memory Limit : 128 MB

Description

请定义一个抽象类CVec,并从CVecpublic方式派生出类CVec2CVec3。具体要求如下:

1)   CVec类只有一个纯虚函数float length(),目的是返回向量的长度,向量长度的计算方法是各分量的平方和再开平方,比如二维向量(x,y),其长度的计算公式为sqrt(x*x + y*y)

2)   CVec类没有属性

3)   CVec2类代表二维向量。它有两个公有的float类型属性_x和_y,分别存储二维向量的xy分量值

4)   CVec2类有一个带参数的构造函数,第一个参数是x分量值,第二个参数是y分量值。其作用是对其公有属性进行初始化。

5)   CVec2类需要重新定义其继承自基类的length成员函数,实现计算二维向量的长度

6)   对运算符“+”进行重载,实现两个CVec2对象的求和,返回值是两个向量的和矢量,而且和矢量的长度被归一化为1。和矢量的计算方法是两个向量的对应分量之和形成的新向量。长度被归一化为1的意思是保持向量的方向不变,将其长度变为1,即向量的每个分量都除以向量的长度。

7)   CVec3类代表三维向量。它有三个公有的float类型属性_x、_y和_z,分别存储三维向量的x,yz分量值

8)   CVec3类有一个带参数的构造函数,第一个参数是x分量值,第二个参数是y分量值,第三个参数是z分量值。其作用是对其公有属性进行初始化。

9)   CVec3类需要重新定义其继承自基类的length成员函数,实现计算三维向量的长度

10) 对运算符“+”进行重载,实现两个CVec3对象的求和,返回值是两个三维向量的和矢量,而且和矢量的长度被归一化为1



请把下面的所有代码复制到你的开发环境中,按照上文要求填充所需要的代码,然后提交该代码进行测试。(注意:main函数中的内容是不能修改的,违者0分)



#include <iostream>

#include <iomanip>

#include <cmath>



using namespace std;



/*

* 请在main函数之前,填写你的代码

*/



/// 下面的main函数代码你不需要阅读,也【不能修改;一旦改动,本题0分】。

int main()

{

    int mode = -1;

    CVec* pV = NULL;



    do

    {

        std::cin >> mode;

        if (mode != 2 && mode != 3) break;



        float v1_x, v1_y, v1_z, v2_x, v2_y, v2_z;

        if (mode == 2)

            std::cin >> v1_x >> v1_y >> v2_x >> v2_y;

        else

            std::cin >> v1_x >> v1_y >> v1_z >> v2_x >> v2_y >> v2_z;



        if (mode == 2)

        {

            CVec2 v2d1(v1_x, v1_y), v2d2(v2_x, v2_y), v2d_sum(0, 0);



            cout << setprecision(4) << v2d1.length() << "," << v2d2.length() << endl;



            v2d_sum = v2d1 + v2d2;

            cout << setprecision(4) << v2d_sum._x << "," << v2d_sum._y << endl;



            pV = &v2d1;

        }

        else

        {

            CVec3 v3d1(v1_x, v1_y, v1_z), v3d2(v2_x, v2_y, v2_z), v3d_sum(0, 0, 0);



            cout << setprecision(4) << v3d1.length() << "," << v3d2.length() << endl;



            v3d_sum = v3d1 + v3d2;

            cout << setprecision(4) << v3d_sum._x << "," << v3d_sum._y << "," << v3d_sum._z<< endl;



            pV = &v3d1;

        }



        cout << setprecision(4) << pV->length() << endl;



    } while (true);



    return 0;

}



Input

输入数据的内容你不需要仔细研读,因为输入逻辑在main函数中,而main函数中的内容不需要你写,也不能改。

Output

输出数据的内容你也不需要仔细研读,因为输出逻辑在main函数中,而main函数中的内容不需要你写,也不能改。

Sample Input Copy

2
1 0 0 1
3
1 0 0 0 1 0
0

Sample Output Copy

1,1
0.7071,0.7071
1
1,1
0.7071,0.7071,0
1

Source/Category