我对这个程序有2个问题:
为什么我不能使用标记为QUESTION 1的注释结构。调用复制构造函数而不是显式构造函数(据我所知,编译器调用时签名不明确)构造函数)。
我是否必须使用"删除[] p"对于在问题2中分配的指针,还是析构函数会自动删除它?
我是班级的新手,我试图掌握它,所以提前谢谢你。
#include <iostream>
using namespace std;
#define DIM 2
class Complex {
double re, im;
char *name;
public:
Complex(double re = 1.0, double im = 1.0) {
Complex::name = new char[9];
Complex::re = re;
Complex::im = im;
}//constructor
Complex(const Complex &aux) {
re = aux.re;
im = aux.im;
name = aux.name;
}//copy constructor
void setReal(double re);
void setImag(double im);
void setName(char name[9]);
double getReal();
double getImag();
char *getName();
Complex sum(Complex);
Complex dif(Complex);
Complex multi(Complex);
Complex div(Complex);
~Complex() {
}//destructor
};
void main() {
Complex *p = new Complex[DIM]; //QUESTION 2
//Is the destructor called or do I have do use delete []p ?
char *name[DIM];
for (int i = 0; i < DIM; i++) {
//data input
}
for (int i = 0; i < DIM; i++) //freeing memory
delete name[i];
//Complex sum(), dif(), prod(), div(); //QUESTION 1
//why is this calling the copy constructor instead of the explicit
//constructor with the deault parameters ?
Complex sum(*p), dif(*p), prod(*p), div(*p); //initialising with the first element using copy constructor
for (int i = 1; i < DIM; i++) {
sum=sum.sum(*(p+i));
dif = dif.dif(*(p + i));
prod = prod.multi(*(p + i));
div = div.div(*(p + i));
}
//some data output
//delete[]p;
}//end main
答案 0 :(得分:2)
这一行:
Complex sum(), dif(), prod(), div();
未创建Complex
变量sum
,dif
,prod
和div
。它实际上声明了4个不带参数的函数并返回Complex
。声明如下:
Complex sum, dif, prod, div;
符合预期的
答案 1 :(得分:1)
对于第二个问题,您必须设置循环以删除每个对象的name
成员变量,或者为您的类编写解构函数并使用delete []p
。