PDA

View Full Version : distructor



shaaadi
یک شنبه 30 خرداد 1389, 12:48 عصر
چرا تو این برنامه وقتی arr داره delete میشه distructor ها صدا زده نمی شن اما وقتی aTa داره delete میشه distructor ها صدا زده میشن ؟ در واقع distructor های کلاس هایی که با arr بهشون اشاره کردیم کی صدا زده می شن ؟




#include "iostream"
#include "string.h"
using namespace std;

class Person{
char name[100];
char family[100];
public :
Person(char *aName,char *aFamily);
virtual void Print();
};

class Student : public Person
{
char studentId[10];
public :
Student(char *aName,char *aFamily,char *anId);
virtual void Print();
~Student()
{
cout << "D-ST ";
}
};

class TA : public Student
{
char courseName[50];
public :
TA(char *aName,char *aFamily,char *anId,char *aCourseName);
virtual void Print();
~TA()
{
cout << "D-TA ";
}
};

Person::Person(char *aName,char *aFamily)
{
strcpy(name,aName);
strcpy(family,aFamily);
cout << "C-PE ";
}

void Person::Print()
{
cout << name << " " << family << " ";
}

Student::Student(char *aName,char *aFamily,char *anId)
:Person(aName,aFamily)
{
strcpy(studentId,anId);
cout << "C-ST ";
}
void Student::Print()
{
cout <<"\n" <<studentId << "chera? " << endl;;
}

TA::TA(char *aName,char *aFamily,char *anId,char *aCourseName)
:Student(aName,aFamily,aCourseName)
{
strcpy(courseName ,aCourseName);
cout << "C-TA ";
}

void TA::Print()
{
Student::Print();
cout << courseName << " ";
}

int main(int argc, char* argv[])
{
Person *arr[3];

try {
arr[0] = new Student("Ali","Ahmadi","123");
arr[1] = new TA("Reza","Emami","456","Math");
arr[2] = new Person("Ehsan","Davari");

for(int i=0;i<3;i++)
arr[i]->Print();

for(int i=0;i<3;i++)
delete arr[i];

TA *aTa = new
TA("Maryam","Jalali","789","Physics");
delete aTa;
throw "test";
}
catch(int x)
{
cout << "Ex" << x << " ";
}
catch(...)
{
cout << "Ex-Unknown ";
}

}