DETalLED 2020-03-28 21:13 采纳率: 0%
浏览 262
已结题

请教大佬这道题如何解决?(已想明白)

一道C++课本上的编程题:

编写一个程序完成下列功能:

a)创建用户自定义类型Complex,使其拥有private整形数据成员real和imaginary,并声明重载的流插入和流提取运算符函数为该类的友元。

b)定义流插入和流提取运算符函数。流提取运算符函数应该判断输入的数据是否有效;如果不是,它应该设置failbit为来表示有错误输入。输入的格式应该是
3 + 8i

c)这两个数字可以是正的,也可以是负的,并且可能两个数字中缺少一个。如果缺少一个值,对应的数据成员应当被设置为零。当输入发生错误时,流插如运算符不能显示该数。当输入的imaginary值为负时,应当显示减号而不是加号。

d)编写一个main函数,检查用户自定义类Complex的输入和输出,其中使用重载的流提取和流插入运算符。

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-03-28 22:45
    关注
    #include <iostream>
    using namespace std; 
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    /*6. 更加完整建立一个复数类 Complex,要求
    a. 含两个私有数据成员:real, imaginary: float
    b. 具有三种构造函数:a.不带参数构造: 0+0i
    b.以实部和虚部构造 
    c.拷贝构造函数
    c.公有成员函数包括如下功能:
    输出这个复数
    与另一复数的加法函数,要求函数原型为 complex add(complex c);
    判断与另一复数是否相等 要求函数原型为bool isEqual(complex c);
    在main函数中,输入两个复数,判断两个复数是否相等(实部和虚部要分别相等),然后两者相加之和赋值给一个新的复数,并输出
    思考:基于上面的Complex类,有如下main函数能否通过运行,有那些是错误的,为什么?
    int main()
    {
    Complex a,b;
    Complex c=a+b;
    Complex d=a;
    Complex e;
    e=a;
    return 0;
    }*/
    class Complex{
    public:
        void getRI(float R,float I);     //设置复数的两个私有成员
        void output();                   //输出这个复数
        void add(Complex c);             //与另一复数的加法函数 原型为 add (Complex c);
        void isEqual(Complex c);         //判断与另一复数是否相等
        Complex(){                       //不带参数的构造函数 
            real=0;
            imaginary=0;
        } 
        Complex(float R,float I);        //以实部和虚部构造
        Complex(Complex &c);             //复制构造函数 
        Complex operator+(Complex& b)
        {
            real += b.real;
            imaginary += b.imaginary;
            return *this;
        }
    private:
        float real,imaginary;
    };
    Complex::Complex(float R,float I)      //带参数构造函数的实现 
    {
        real=R;
        imaginary=I;
    }
    Complex::Complex(Complex &c){
        real=c.real;
        imaginary=c.imaginary;
        cout<<"calling the copy constructor"<<endl;
    } 
    void Complex::getRI(float R,float I){
        real=R;
        imaginary=I;
    }
    void Complex::output(){
        cout<<real<<"+"<<imaginary<<"i"<<endl; 
    }
    void Complex::add(Complex c){
        cout<<"两复数相加为:";
        cout<<real+c.real<<"+"<<imaginary+c.imaginary<<"i"<<endl;
    }
    void Complex::isEqual(Complex c){
        if(real==c.real)
        {
            if(imaginary==c.imaginary)
                cout<<"They are equal."<<endl;
        }
        else
            cout<<"They are not equal."<<endl;
    }
    int main(int argc, char** argv) {
        Complex c1;
        Complex c2(1,2);       //调用带参数的构造函数
        Complex c3(3,4);        //用对象c2初始化对象c3,复制构造函数被调用 
    
        float R1,I1,R2,I2;
        cin>>R1>>I1;
        cin>>R2>>I2;
        c2.getRI(R1,I1);
        c3.getRI(R2,I2);
        cout<<"复数c2为:";
        c2.output();
        cout<<"复数c3为:";
        c3.output();
        c2.add(c3);    
        c2.isEqual(c3);    
        /*函数调用的时候不用
        也不可以包含两类型名,
        应该写成myComplex.add(c); */ 
    
        Complex a,b;
        Complex c=a+b;
        Complex d=a;
        Complex e;
        e=a;
        return 0;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置