记录一下碰到的笔试题和找到的答案

 

继承的优缺点

优点:类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便的改变父类的实现

缺点:无法在运行时刻改变从父类继承的实现;父类通常至少定义了子类的部分行为,父类的任何改变都可能影响子类的行为;如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换,这种依赖关系限制了灵活性并最终限制了复用性

 

C++有哪些性质(面向对象特点)

封装、继承和多态

子类析构时要调用父类的析构函数吗?

析构函数的调用次序:先派生类的析构后基类的析构

构造函数的调用次序:先基类的构造后派生类的构造

 

多态,虚函数,纯虚函数

虚函数

虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数。可实现成员函数的动态重载。虚函数是成员函数,而且是非static的成员函数。说明虚函数的方法如:virtual <类型说明符><函数名>(<参数表>) 其中,被关键字virtual说明的函数称为虚函数。

如果某类中的一个成员函数被说明为虚函数,这就意味着该成员函数在派生类中可能有不同的实现。(例:一句俗话就是“聋子的耳朵——摆设”,就象一个残疾人士,可能他听不见,但不代表他儿子听不见,我们一般把基类叫做“父类”,派生类叫做“子类”。但我们不能说“龙生龙,凤生风,老鼠生儿会打洞”啊!他老爸的耳朵是摆设,但在儿子这里就是接受信息的器官了。)

(1) 与基类的虚函数有相同的参数个数;

(2) 其参数的类型与基类的虚函数的对应参数类型相同;

(3) 其返回值或者与基类虚函数的相同,或者都返回指针或引用,并且派生类虚函数所返回的指针或引用的基类型是基类中被替换的虚函数所返回的指针或引用的基类型的子类型。(就像他老爹不识字,但是他可以让他读大学的儿子来带他看信,读报一样)一般要求基类中说明了虚函数后,派生类说明的虚函数应该与基类中虚函数的参数个数相等,对应参数的类型相同,如果不相同,则将派生类虚函数的参数的类型强制转换为基类中虚函数的参数类型。

 

纯虚函数

纯虚函数是一种特殊的虚函数,是在基类中声明的但在基类中没有定义,要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”。它的一般格式如下:

class <类名>

{

virtual <类型><函数名>(<参数表>)=0;

};

在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。

 

抽象类

包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的较上层。抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。抽象类的主要作用是将有关的组织在一个继承层次结构中,由它来为它们提供一个公共的根,相关的子类是从这个根派生出来的。(例:就是一个手机模具)抽象类刻画了一组子类的操作接口的通用语义,这些语义也传给子类。一般而言,抽象类只描述这组子类共同的操作接口,而完整的实现留给子类。抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类没有重新定义纯虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类了。

 

多态性

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。运行时的多态性:运行时的多态性就是指直系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写虚成员实现。

 

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值