关于析够函数问题,谢谢丫
class Student
{
public:
Student()
{
cout < < "Constructing Student.\n ";
semesHours=100;
gpa=3.5;
}
~Student()
{
cout < < "Destructing Sutndet.\n ";
}
protected:
int semesHours;
float gpa;
};
class Teacher
{
public:
Teacher()
{
cout < < "Constructing Teacher.\n ";
}
~Teacher()
{
cout < < "Destructing Teacher.\n ";
}
};
class TutorPair
{
public:
TutorPair()
{
cout < < "Constructing Tutorpair.\n ";
noMeeting=0;
}
~TutorPair()
{
cout < < "Destructing Tutorpair.\n ";
}
protected:
Student student;
Teacher teacher;
int noMeeting;
};
int main()
{
TutorPair tp;
cout < < "Back in main.\n ";
getchar();
}
钱能《C++程序设计》第269页说程序运行结果为:
Constructing Student.
Constructing Teacher.
Constructing Tutorpair.
Back in main.
Destructing Tutorpair
Destructing Teacher.
Destructing Sutndet.
可是我在VS2005里面运行结果为:
Constructing Student.
Constructing Teacher.
Constructing Tutorpair.
Back in main.
很晕~~~请问是书上写错了儿吗?还有书上说如果类出了作用域就会自动调用析构函数,可是VS2005好象没有调用,真的有点迷糊~~~~
[解决办法]
有,你没看见,把 getchar去了,然后选择运行(不调试),默认那个绿色的是调试运行
[解决办法]
调用了,不过你没看到。
int main()
{
TutorPair tp;
cout < < "Back in main.\n ";
getchar(); // --> 还没执行呢,当然没有析构了
}
你改成这样吧:
int main()
{
{
TutorPair tp;
}
cout < < "Back in main.\n ";
getchar(); // --> 还没执行呢,当然没有析构了
}
会有输出 :
Constructing Student.
Constructing Teacher.
Constructing Tutorpair.
Destructing Tutorpair
Destructing Teacher.
Destructing Sutndet
Back in main.
[解决办法]
你没看见而已,
1、在控制台窗口运行你的程序。
2、 改成这样,更清楚就看见了
int main()
{
{
TutorPair tp;
cout < < "Back in main.\n ";
} //结束它的作用域。
getchar();
}