1.下面关于继承说法不正确的是( )
A.继承可以使用现有类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展
B.继承体系中子类必须要体现出与基类的不同
C.子类对象一定比基类对象大
D.继承呈现了面相对象程序设计的层次结构,体现了有简单到复杂的认知过程
答案解析
A.这是继承的功能,也是代码复用的体现
B.继承除了吸收基类成员之外,一般还需要扩充自己的数据成员,跟基类有所不一样
C.不一定,有可能子类只是改写父类的方法而已,并没有增加其自身的数据成员,则大小一样,故错误
D.继承体现了一定的层次结构和认知过程
2.关于继承说法正确的是( )
A.所有的类都可以被继承
B.Car(汽车)类和Tire(轮胎)类可以使用继承方式体现
C.继承是实现代码复用的唯一手段
D.狗是一种动物,可以体现出继承的思想
答案解析
A.final说明的类不能被继承
B.应该使用组合,因为Tire类跟Car类属于Has-a的关系
C.模板也是代码复用的重要手段
D.狗是动物的一种,属于is-a关系,是继承的体现
3.下面关于访问权限与继承权限说法不正确的是( )
A.访问权限和继承权限是不同的概念
B.访问权限和继承权限关键字上是一样的,但是出现位置不一样
C.如果是protected继承方式,基类public的成员变量能通过基类对象在类外直接访问
D.基类私有的成员变量在子类中都不能直接访问,因为没有被子类继承了
答案解析
A.两个权限控制的东西不一样
B.访问权限在类内部,继承权限在类外
C.只要是public成员对象都可以直接访问
D.基类私有成员不能直接访问不是没有被继承,而是权限问题
4.关于同名隐藏的说法正确的是( )
A.同一个类中,不能存在相同名称的成员函数
B.在基类和子类中,可以存在相同名称但参数列表不同的函数,他们形成重载
C.在基类和子类中,不能存在函数原型完全相同的函数,因为编译时会报错
D.成员函数可以同名,只要参数类型不同即可,成员变量不能同名,即使类型不同
答案解析
A.可以存在,如函数重载
B.基类与子类函数名字相同,参数不同,形成的是隐藏
C.可以共存
D.成员函数在同一个类里面同名,此时构成了重载,但变量一定不能同名,故正确
5.关于同名隐藏的说法正确的是( )
下面代码输出结果:( )
class A
{
public:
void f(){ cout<<“A::f()”<<endl; }
int a;
};
class B : public A
{
public:
void f(int a){cout<<“B::f()”<<endl;}
int a;
};
int main()
{
B b;
b.f();
return 0;
}
A.打印A::f()
B.打印B::f()
C.不能通过编译,因为基类和派生类中a的类型以及名称完全相同
D.以上说法都不对
答案解析
A.错误
B.错误
C.不能通过编译是正确的,不过原因不是因为成员变量a的问题,而是子类同名隐藏了父类方法的原因
D.很显然以上说法都不对