C++ 为什么这里不调用显式构造函数?
我对本课程有两个问题:C++ 为什么这里不调用显式构造函数?,c++,class,constructor,C++,Class,Constructor,我对本课程有两个问题: 为什么我不能使用标记为问题1的注释结构。调用的是复制构造函数而不是显式构造函数(据我所知,编译器调用构造函数时签名并不含糊) 我是否必须对问题2中分配的指针使用“delete[]p”,或者析构函数是否会自动删除它 我是新来上课的,我正在努力掌握窍门,所以提前谢谢你 #include <iostream> using namespace std; #define DIM 2 class Complex { double re, im; ch
#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
#包括
使用名称空间std;
#定义尺寸2
阶级情结{
双re,im;
字符*名称;
公众:
复杂(双re=1.0,双im=1.0){
Complex::name=新字符[9];
复合::re=re;
复合::im=im;
}//建造师
综合设施(综合设施和辅助设施){
re=辅助re;
im=辅助im;
name=aux.name;
}//复制构造函数
void setReal(双re);
无效设置标记(双im);
void setName(字符名[9]);
双getReal();
双getImag();
char*getName();
复数和(复数);
复合dif(Complex);
复杂多(复杂);
复杂组(复杂组);
~Complex(){
}//析构函数
};
void main(){
复数*p=新复数[DIM];//问题2
//是调用析构函数还是必须使用delete[]p?
字符*名称[DIM];
对于(int i=0;i
对于第二个问题,您必须设置一个循环来删除每个对象的名称
成员变量,或者为类编写解构器并使用delete[]p
此处的行:
Complex sum(), dif(), prod(), div();
未创建复杂变量sum
、dif
、prod
和div
。它实际上声明了4个函数,这些函数不带任何参数,并返回一个复合体。声明如下:
Complex sum, dif, prod, div;
哪个按预期工作你能把代码缩小一点吗?好的,只需一秒钟。任何时候你使用new
,都需要相应的delete
;否则会泄漏内存。另外:不要使用void main()
;它不是合法的C++。改用int main()
。好的,谢谢。我使用ValueMin(),因为我在大学里做这个,我们使用VisualStudio(我注意到,当我试图在XCODE中写一些C++时,这是非法的)。代码>否解构器应该是删除名称
和在主代码中,当您要删除对象数组时,只需键入delete[]p
@mask no,它应该是delete[]name
,因为它是用new[]