问个简单问题!
22.类B是通过public继承方式从类A派生而来的,且类A和类B都有完整的实现代码,那么下列说法正确的是:
A.类B中具有public可访问性的成员函数个数一定不少于类A中public成员函数的个数
B.一个类B的实例对象占用的内存空间一定不少于一个类A的实例对象占用的内存空间
C.只要类B中的构造函数都是public的,在main函数中就可以创建类B的实例对象
D.类A和类B中的同名虚函数的返回值类型必须完全一致
哪位能解释下各个选项.
[解决办法]
自己写点代码来试。
另外,去看《深度探索C++对象模型》
[解决办法]
首先,同意楼上的
下边逐条解释一下:
A.类B中具有public可访问性的成员函数个数一定不少于类A中public成员函数的个数
类B可以通过命名同样名字的函数来隐藏类A的public函数,所以这条不正确。
B.一个类B的实例对象占用的内存空间一定不少于一个类A的实例对象占用的内存空间
这条是正确的
C.只要类B中的构造函数都是public的,在main函数中就可以创建类B的实例对象
这条应该是错误的吧,待会再验证一下
D.类A和类B中的同名虚函数的返回值类型必须完全一致
这条是错误的,其实返回值可以是协类型
[解决办法]
类B可以通过命名同样名字的函数来隐藏类A的public函数,所以这条不正确。
------
子类不能缩小父类函数的可见性,
这么解释不对吧
[解决办法]
呵呵,b.A::foo();