У меня есть 2 вопроса для этой программы:Почему явный конструктор не называется здесь?
Почему я не могу использовать комментируемую структуру, помеченную как ВОПРОС 1. Конструктор копирования вызываются вместо явного конструктора (насколько я могу судить, подпись не является двусмысленной для компилятора для вызова конструктора).
Должен ли я использовать «delete [] 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
Вы можете сузить код вниз немного? –
Хорошо, всего одна секунда. –
В любое время, когда вы используете 'new', должно быть соответствующее' delete'; иначе вы пропустите память. –