Untitled Document

二、 问答题（每小题5分，共20分）
1． 若程序员没有定义拷贝构造函数，则编译器自动生成一个缺省的拷贝构造函数，它可能会产生什么问题？
解答要点：当对象含有指针数据成员，并用它初始化同类型的另一个对象时，缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象，而不能将该对象中指针所指向的内存单元也复制过去。这样，就可能出现同一内存单元释放两次，导致程序运行出错。
2． 简述成员函数、全局函数和友元函数的差别。
解答要点：以下几点必须说清楚：
成员函数是在类内部定义的，作用域在类的内部，成员函数可以访问类的数据成员（公有、保护和私有数据成员），可以调用该类的其它成员函数（公有、保护和私有成员函数），可以调用全局函数。如果友元函数是另一个类的公有成员函数，则该类的成员函数也只能通过那个类的对象调用，不能调用那个类的保护和私有成员函数。非本类成员函数（其它类成员函数或全局函数）可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员函数。
不是在类中定义的成员函数都是全局函数。
如果某一个函数（全局函数或类的成员函数）定义为另一个类的友元函数，需要在那个类中用friend关键字声明，友元函数并不是类的成员，它的定义自然是在那个类的外面。
3． 简述结构化的程序设计、面向对象的程序设计的基本思想。
解答要点：结构化的程序设计将数据和对数据的操作分离，程序是由一个个的函数组成的，面向对象的程序设计将数据和操作封装在一起，程序是由一个个对象组成的，对象之间通过接口进行通信，它能够较好地支持程序代码的复用。
4． 结构struct和类class有什么异同？
解答要点：struct和class都可以定义类，但是缺省访问权限说明时，struct的成员是公有的，而class的成员是私有的。在C++中，struct可被class代替。