Заголовочный файл: файл Date.h
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
class Date{
private:
int day;
int month;
int year;
public:
Date(int d = 1, int m = 1, int y = 1900): day(d), month(m), year(y)
{
cout << "date constructor is called"<< endl;
}
void print() const {
cout << day << ":" << month << ":" << year <<endl;
}
~Date(){
cout << "date destructor is called"<< endl;
}
};
Заголовочный файл: Employee.h
#include"Date.h"
class Employee{
private:
char *fname;
char *lname;
Date dob; // object, has-a relationship
Date hiredate; // object, has-a relationship
public:
Employee(char *f, char *l, Date bd, Date hd){
cout << "employee constructor is called"<< endl;
int lengthf;
lengthf = strlen(f);
fname = new char[lengthf+1];
strcpy(fname, f);
int lengthl;
lengthl = strlen(l);
lname = new char[lengthl +1];
strcpy(lname, l);
}
~Employee(){
delete [] fname;
delete [] lname;
cout << "employee destructor is called"<< endl;
}
};
функция main () :
#include"Employee.h"
int main(){
Date db(07, 11, 1991);
Date dh;
dh.print();
Employee e("Dan", "Lee", db , dh);
db.print();
system("pause");
return 0;
}
После выполнения получаем это!
Итак, вопрос в том, как мы видим, выполняется 4 конструктора даты, а затем вызывается конструктор класса Employee. Далее выполняются два деструктора даты. Теперь, когда мы получаем опцию «нажать клавишу» и как только мы нажимаем, мы получаем вызов деструктора Employee перед 4 вызовами деструктора даты. Таким образом, всего 4 вызова конструктора даты и 6 вызовов деструктора даты. Однако класс Employee вызывает один конструктор и деструктор.
** Почему существует 4 вызова конструктора даты и больше вызовов деструктора, 6 вызовов деструктора? Кроме того, может ли кто-нибудь разработать последовательность и указать точки, в которых эти конструктор и деструктор вызываются, один за другим.
Кроме того, следует отметить, что объекты-члены передаются конструктору Employee по значению. Но если мы передадим по ссылке, то будет 4 вызова конструктора даты и 4 вызова деструктора даты, в то время как один и один вызовы конструктора и деструктора класса Employee. Проверьте картинку.
вызовы конструктора и деструктора, когда ссылка на объекты передается в конструктор класса Employee
Я новичок ie, так что это будет большим подспорьем. Спасибо **