首页 > 解决方案 > 为什么我可以计算出对象变量?

问题描述

我正在尝试创建一个类 Complex(复数形式的 z=a+ib m,其中 a= _re 和 b=_im),我需要使用 2 个参数(double,double)创建和构造函数。_re 和 _im 是 2 个双指针,我不知道如何将它们指向一个值。这是代码,我不能修改 Class 因为是学校项目。

#include <iostream>
#include <cmath>
using namespace std;

class Complex {
private:
    double* _re;
    double* _im;
public:
    Complex();
    Complex(double, double);
    void Display();
};

Complex::Complex()
{
    _re = 0;
    _im = 0;
    cout << "Complex::Complex()" << endl;
}

Complex::Complex(double re, double im)
{
    double* _re = new double;
    _re = &re;
    double* _im = new double;
    _im = &im;
     cout << "Complex::Complex(double re,double im)" << endl;
}

void Complex::Display()
{
    int nr = 1;
    cout << "z" << nr << "= " << *_re << "+i* " << *_im << endl; nr++;

}

int main()
{
    Complex z1(2,3);
    z1.Display();
    return 0;

}

标签: c++classpointers

解决方案


您应该如下更新您的构造函数:

Complex::Complex(double re, double im)
{
    _re = new double;
    *_re = re;
    _im = new double;
    *_im = im;
    cout << "Complex::Complex(double re,double im)" << endl;
}

请注意,以前当您声明double* _re = new double它是一个局部变量时。所以你从来没有初始化类变量_re_im.

更好的构造函数定义是使用构造函数成员初始化器列表语法。见下文:

Complex::Complex(double re, double im)
    : _re(new double), _im(new double)
{
    *_re = re;
    *_im = im;
     cout << "Complex::Complex(double re,double im)" << endl;
}

推荐阅读