问题
单项选择题
若有如下类定义: class B {void fun1() { protected:double var1; public:void fun2() { }, class D: public B protected:void fun3() { };已知obj是类D的对象,下列语句中不违反类成员访问控制权限的是
A.obfun1();
B.obvarl;
C.obfun2();
D.obfun3();
答案
参考答案:C
解析: 本题考查的知识点是:基类成员在派生类中的访问属性。基类中公有成员和保护成员在派生类中的访问属性将随着继承方式而改变:派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员:派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员;派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍为保护成员。本题中,D类从B类公有继承,B类中fun1()为私有、fun2()为公有、varl为保护,公有继承到D类后fun1()不可访问、fun2()仍为公有、varl仍为保护。D类自身的fun3()是保护属性。所以综上所述,只有从B类继承的fun2()为公有属性,故本题应该选择C。