以下关于 C++ 中类的说法,哪一项是正确的?
C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。
构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。
【考点】类与对象(GESP六级第4章)|访问权限|构造函数
命题人把这道题放在六级,就是卡住绝大多数考生对C++封装本质的理解偏差——他们总以为类成员默认公开,其实默认是private,所以C是唯一符合封装原则的选项。
看到题先问:类成员默认访问权限是什么?构造函数有返回类型吗?实例成员是共享还是独立?——A错在默认public,B错在构造函数无返回类型,D错在成员函数是静态定义、实例共享。只有C符合封装原则:数据私有、公有访问函数。
A的陷阱是‘默认public',命题人利用初学者C语言全局变量思维迁移;B的陷阱是‘构造函数必须有void',偷换函数定义概念;D的陷阱是‘各自拥有成员’,把类定义当成实例私有。C里‘唯一途径’看似绝对,但其实是封装的核心表述——如果只背结论,就会忽略‘私有数据+公有接口’这一对概念。
命题人若把‘默认public'改成‘默认private',A就对了;若把‘唯一途径’改成‘主要途径’,C仍对但表述更松;若把‘构造函数必须声明void'改成‘构造函数不能有返回类型’,B就错了。遇到类似题,先问:‘这道题想让我判断什么?’