某悦的每日面试题打卡3

1.C语言struct和C++struct的区别

(1)C语言中,struct是用户自定义数据类型(UDT);C++中,struct是抽象数据类型(ADT),支持成员函数的定义,能继承,能实现多态。

(2)C语言中struct是没有权限设置的,且struct只能是一些变量的集合体,可以封装数据却不可以隐藏数据,而且成员不可以是函数;C++中,struct的成员默认访问说明符为public(为了与C兼容),class中的默认访问限定符为private,struct增加了访问权限,且可以和类一样有成员函数。

(3)struct作为类的一种特例是用来自定义数据结构的。在C中,一个结构标记声明后必须在结构标记前加上struct,才能做结构类型名。

2.虚函数可以声明为inline(内联)么?

虚函数又称为晚绑定或动态绑定,用于实现运行时的多态。

内联函数用于提高效率,它的原理是:在编译期间,在调用内联函数的位置插入对应内联函数代码。内联函数对于程序中需要频繁使用和调用的小函数非常有用。

虚函数可以是内联函数,内联是可以修饰虚函数的,但是当虚函数表现多态性的时候不能内联

因为虚函数的多态性在运行期间,而内联函数要求在编译期间完成相关的函数替换,编译器无法知道运行期调用哪个代码,因此虚函数表现为多态性时(运行期)不可以内联。inline virtual 唯一可以内联的时候是:编译器知道所调用的对象是哪个类,这只有在编译器具有实际对象而不是对象的指针或引用时才会发生。

3.构造函数和析构函数可以调用虚函数么,为什么?

在C++中,提倡不在构造函数和析构函数中调用虚函数

(1)构造函数和析构函数调用虚函数时都不使用动态联编,如果在构造函数或析构函数中调用虚函数,则运行的是为构造函数或析构函数自身类型定义的版本;

(2)因为父类对象会在子类之前进行构造,此时子类部分的数据成员还未初始化,因此调用子类的虚函数时不安全的,故而C++不会进行动态联编;

(3)析构函数是用来销毁一个对象的,在销毁一个对象时,先调用子类的析构函数,然后再调用基类的析构函数。所以在调用基类的析构函数时,派生类对象的数据成员已经销毁,这个时候再调用子类的虚函数没有任何意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值