【后端面试重点总结】C++篇(一)

一.面向对象语言特征

继承:让某种类型的对象获得另一个对象的属性和方法。实现继承,接口继承,可使继承。

        实现继承和接口继承:成员函数的接口总是会被继承,声明non-virtual函数的目的是为了令派生类继承函数的接口以及一份强制性实现,声明一个纯虚函数的目的是为了让派生类只继承函数接口,声明impure virtual函数的目的,是让派生类继承该函数的接口和缺省实现。

C/C++编程:区分接口继承和实现继承_c++接口继承-CSDN博客

重点问题:多继承和虚继承(c++ prime p711)

回答:一个子类拥有多个父类,多继承中保存共同基类的多份同名成员,通过虚继承解决,中间层父类不再关注顶层父类初始化,最终子类直接调用顶层父类构造函数。虚继承是无论派生类中的虚基类在继承体系中出现多少次,派生类只包含一个共享的虚基类子对象。

封装:把客观事物封装成抽象的类,避免外界干扰和不确定访问。

多态:重载实现编译期的多态,虚函数实现运行时的多态。

        重载:C++允许在同一作用域重声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或者类型,类型的顺序)不同。C++——函数重载及底层原理_c++ 重载 的底层实现?-CSDN博客

底层原理:首先了解编译过程:详解编译过程(编译+链接)_LILI_Plusing的博客-CSDN博客

编译期间,进行语法,词法,语义分析并进行符号汇总,到汇编阶段生成符号表。调用函数需要根据符号表找到函数名,才能找到地址来调用。c++生成的符号表,不是按照函数名+地址的格式,而是对函数名进行一定的修饰,而且有自己的修饰规则(_Z+函数名所占字节数+函数名+参数类型的首字母),从而实现重载。

        虚函数:纯虚函数和非纯虚函数 C++虚函数详解-CSDN博客

        原理:在基类中,通过virtual关键字修饰的函数叫做虚函数,具有虚函数的对象在储存空间的开始处会开辟一个指向虚函数表(vftable)的指针(_vfptr)。这个虚函数表顺序存放每个虚函数的指针,本质上就是一个指针数组。对_vfptr取值,得到数组首地址,再取值得到数组第一个元素,也就是第一个虚函数的地址。

C++——虚函数和纯虚函数、抽象类、虚析构和纯虚析构_纯虚函数和抽象函数-CSDN博客

        纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。目的是,使派生类仅仅只是继承函数的接口。在基类中实现纯虚函数的方法是在函数原型后加 =0:

virtual void funtion1()=0

        非纯虚函数: 让派生类继承该函数的接口和缺省实现。

        重点问题:

        ①构造函数和虚构函数能不能是虚函数?

         回答:构造函数不能是虚函数,虚函数对应一个指向虚函数表的指针,存在对象内,在构造前对象还未实例化,还没有虚函数表,所以不能是虚函数。析构函数可以是虚函数,释放基类指针时释放子类空间,防止内存泄漏。

        ②一个空类占几字节?包含一个虚函数呢?64位机器?(指针在32位4字节,64位8字节

        回答:一个空类占1字节,每个实例在内存中都有独一无二的地址,空类添一个字节。包含虚函数的空类,32位4字节,64位8字节,因为有虚指针。

        ③一个函数是成员模板函数不能被声明为虚函数

        回答:包含虚函数的类虚表大小是确定的,成员模板函数在使用时才会被实例化,声明为虚函数会使虚表大小不确定。

        ④虚函数可以内联吗?

        回答:可以内联,编译器知道虚函数对应的哪个类时可以,如果是对象指针则不行,表现运行时多态。

Base b;
b.who(); // 可以内联

Base *ptr = new Drived();
ptr->who() // 不可以内联

                              

        

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值