为啥我可以计算出对象变量?
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 = &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++ 程序运行速度较慢?
计算行数或枚举行号,以便我可以遍历它们 - 为啥这是一种反模式?