为啥我可以计算出对象变量?

Posted

技术标签:

【中文标题】为啥我可以计算出对象变量?【英文标题】: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);。现在阅读你书中的指针、成员变量和范围,直到你明白为什么。 【参考方案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;

【讨论】:

以上是关于为啥我可以计算出对象变量?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在函数中返回计算出的距离(来自 Google Maps API)? [复制]

为啥当我使用变量存储数值结果而不是重新计算时,C++ 程序运行速度较慢?

计算行数或枚举行号,以便我可以遍历它们 - 为啥这是一种反模式?

为啥如果我得到计算对象中的对象属性未定义而不是对象本身?哪种方法更适合这种情况?

为啥惰性变量/计算属性,而不仅仅是方法

为啥这个 Vue 计算属性不是响应式的?