【问题标题】:Why I can cout the object variables?为什么我可以计算出对象变量?
【发布时间】:2021-03-11 10:40:07
【问题描述】:

我正在尝试创建一个 Complex 类(复数形式为 z=a+ib m,其中 a= _re 和 b=_im),我需要使用 2 个参数(双精度、双精度)创建和构造函数。 _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;

}

【问题讨论】:

  • 为什么要指针?
  • _re = &amp;re; 这将非常猛烈且非常迅速地回火。
  • 您似乎对指针的工作原理以及指针的必要性存在一些误解。你的类根本不需要指针。
  • 那个类定义是糟糕。如果他们认为可以,你的教师不应该教 C++。
  • 您要查找的代码是_re = new double(re);。现在阅读你书中的指针、成员变量和范围,直到你明白为什么。

标签: c++ class pointers


【解决方案1】:

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

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

更好的构造函数定义是使用constructor member initializer list 语法。见下文:

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

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多