JavaScript实现以个复数类

<script type="text/javascript">
/**
 * 这里定义Complex类,用来描述复数
 */
/**
 * 这个构造函数为它所创建的每个实例定义了实例字段r和i
 * 这两个字段分别保存复数的实部和虚部
 * 他们是对象的状态
 */
function Complex(real , imaginary){
    if( isNaN( real ) || isNaN( imaginary ))    //确保两个实参都是数字
        throw new TypeError();        //如果不都是数字则抛出错误
    this.r = real;                     //复数的实部
    this.i = imaginary;                //复数的虚部
}

/**
 * 类的实例方法定义为原型对象的函数值属性
 * 这里定义的方法可以被所有的实例继承,并为他们提供共享行为
 * 需要注意的是,JavaScript的实例方法必须使用关键字this来存取实例的字段
 */
//当前复数对象加上另外一个复数,并返回一个新的计算和值后的复数对象
Complex.prototype.add = function(that){
    return new Complex(this.r+that.r,this.i+that.i);
};

//当前复数乘以另外一个复数,并返回一个新的计算乘积之后的复数对象
Complex.prototype.mul = function(that){
    return new Complex(this.r*that.r - this.i*that.i , this.r*that.i+this.i*that.r);
};

//计算复数的模,复数的模定义为原点(0,0)到复平面的距离
Complex.prototype.mag = function(){
    return Math.sqrt(this.r*this.r + this.i*this.i);
};

//复数的求负运算
Complex.prototype.neg = function(){
    return new Complex(-this.r , -this.i);
};

//将复数对象装换为一个字符串
Complex.prototype.toString = function(){
    return "{"+this.r+","+this.i+"}";
};

//检测当前复数对象是否和另一个复数相等
Complex.prototype.equals = function(that){
    return that != null &&                //必须有定义且不能是null
    that.constructor ===Complex &&         //必须是Complex的是实例
    this.r==that.r && this.i==that.i;    //必须包含相同的值
};

/**
 * 类字段(比如常量)和类方法直接定义为构造函数的属性
 * 需要注意的是,累的方法通常不使用关键字this
 * 他们只对其参数进行操作
 */
//这里预定义了一些对复数运算有帮助的类字段
//他们的命名全都是大写,用以表明他们是常量
//(在ECMAScript 5中,还能设置这些字段的属性为只读)
Complex.ZERO = new Complex(0,0);
Complex.ONE     = new Complex(1,0);
Complex.I      = new Complex(0,1);

//这个类方法将由实例对象的toString方法返回的字符格式解析为一个Conplex对象
//或者抛出一个类型错误异常
Complex.parse = function(s){
    try{
        var m = Complex._format.exec(s) ; //利用正则表达是进行匹配
        return new Complex(parseFloat(m[1]),parseFloat(m[2]));
    }catch(e){
        throw new TypeError("Can‘t parse ‘"+s+"‘ as a complex number.");
    }
};

//定义累的“私有”字段,这个字段在Complex.parse()中用到了下划线前缀
//来表明他是内部使用的而不属于共有API的部分
Complex._format = /^\{([^,]+),([^}]+)\}/;

//示例代码:
var c = new Complex(2,3);        //使用构造函数创建新的对象
var d = new Complex(2,5)    //用到了c的实例属性
console.log(c.add(d).toString());            //“{5,5}”:使用了实例的方法
//这个稍微复杂的表达式用到了类方法和类字段
console.log(Complex.parse(c.toString()).    //将c转换为字符串
add(c.neg()).                    //加上他的复数
equals(Complex.ZERO));            //结果应当永远是零
</script>
时间: 2024-09-28 17:07:51

JavaScript实现以个复数类的相关文章

【C++】 复数类操作

复数的概念我们高中已经接触过,包含是实部和虚部, For example:2i + 3J:实部和虚部值可为整型,亦可浮点型,那在此实现一下简单的复数类的操作 代码如下: class Complex { public:     Complex(double real,double imag)     {         _real = real;         _imag = imag;     }     Complex(const Complex& c)     {         _rea

C++习题 复数类--重载运算符+,-,*,/

Description 定义一个复数类Complex,重载运算符"+","-","*","/",使之能用于复数的加.减.乘.除.运算符重载函数作为Complex类的成员函数.编写程序,分别求两个复数之和.差.积和商. Input 两个复数 Output 两个复数之和.差.积和商 Sample Input 3 4 5 -10 Sample Output c1+c2=(8.00,-6.00i) c1-c2=(-2.00,14.00

复数类

实现复数类的基本成员函数,复数之间比较大小以及复数的四则运算. 设z1 = a + bi,z2 = c + di(a.b.c.d∈R)是任意两个复数, 复数乘法: (a + bi)(c + di) = (ac - bd) + (bc + ad)i. 复数除法: (a + bi) / (c + di) = (ac + bd) / (c ^ 2 + d ^ 2) + (bc - ad) / (c ^ 2 + d ^ 2)i. 代码如下: #define _CRT_SECURE_NO_WARNINGS

【C++】复数类的实现

复数类的实现: 这个是以前学习的补全,记录一下吧. 复数类本身概念是具备一个实部_real和虚部_image,然后实现复数的加减乘除,自加自减还有等于符号的重载.算是一个基本的联系吧. 废话不多说,看看代码,很简单. Complex_class.h #include <iostream> #include <math.h> using namespace std; class Complex { private: double _real; double _imag; public

sdut 4-1 复数类的运算符重载

4-1 复数类的运算符重载 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握成员运算符重载及友元运算符重载 要求定义一个复数类,重载加法和减法运算符以适应对复数运算的要求,重载插入运算符(<<)以方便输出一个复数的要求. 输入 要求在主函数中创建对象时初始化对象的值. 输出 输出数据共有4行,分别代表a,b的值和它们求和.求差后的值 示例输入 无 示例输出 a=3.2+4.5i b=8.9+5.6i a+b=12.1+10.1i

C++习题 复数类--重载运算符2+

Description 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意.例如,c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数).编写程序,分别求两个复数之和.整数和复数之和. Input 两个复数 一个复数和一个整数 一个整数和一个复数 Output 两个复数之和.复数和整数之和,整数和复数之和. Sample Input 3 4 5 -10 3 4 5 5 3 4 Sa

??复数类--重载运算符3+

请编写程序,处理一个复数与一个double数相加的运算,结果存放在一个double型的变量d1中,输出d1的值,再以复数形式输出此值.定义Complex(复数)类,在成员函数中包含重载类型转换运算符: operator double() { return real; } Input 一个复数与一个double数 Output d1的值和复数形式的此值 Sample Input 3 4 2.5 Sample Output d1=5.50 c2=(5.50, 0.00) /* C++代码 */ #i

简易复数类

[问题描述] 定义一个复数类,并重载运算符,以实现复数的加减乘除,相等与否,并显示其结果. [代码实现] // code.c #include <iostream> using namespace std; class Comoplex { friend ostream& operator<<(ostream& os ,const Comoplex& c); //友元 public: Comoplex(double real = 0.0, double im

4-1复数类的运算符重载(SDUTOJ2677)

http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2677&cid=1275 题目描述 通过本题目的练习可以掌握成员运算符重载及友元运算符重载 要求定义一个复数类,重载加法和减法运算符以适应对复数运算的要求,重载插入运算符(<<)以方便输出一个复数的要求. 输入 要求在主函数中创建对象时初始化对象的值. 输出 输出数据共有4行,分别代表a,b的值和它们求和.求差后的值 示例输入 无 示例输出 a=3.2+4.5i b=8.9+5.6i