C++基础知识总结

面试宝典

基础知识点

封装、继承、多态

  • 多重继承:博客1博客2

  • 多重(菱形)继承的内存布局:博客1博客2博客3

     虚基表指针记录虚基表的地址,虚基表记录公共基类成员相对于虚基表指针地址的偏移量,
     通过偏移量可以找到公共基类成员的位置
    
  • C++ 公有继承、保护继承和私有继承的对比详解

  • C++静态多态与动态多态 (重要!!)

  • C++多态(虚函数、静态链接、动态链接、虚函数表、虚表指针)

     	虚函数的调用关系:this->vptr->虚函数表->虚函数
    
  • 虚函数表指针以及虚函数表创建时机:博客1博客2

     子类对象的vptr指针指向子类虚函数表,但是在调用父类的构造函数的时候创建,可以认为Vptr指针是属于父类的成员,但在调用子类的构造函数时Vptr又被赋值指向子类的虚函数表。
    
  • this指针和虚函数理解

  • 虚函数表位于只读数据段(.rodata),也就是C++内存模型中的常量区;而虚函数则位于代码段(.text),也就是C++内存模型中的代码区:C++中的虚函数表和虚函数在内存中的位置

  • 重写、重载、重定义:博客1博客2

  • 虚函数返回值协变: c++返回类型协变

  • C++面试题之浅拷贝和深拷贝的区别

  • 重载运算符:代码

  • C++中构造函数,拷贝构造函数和重载赋值运算符的区别和实现

    重载赋值运算符时有指针变量:先释放原本指向的堆内存空间,再进行深拷贝。

    /*
    	对象不存在,且没用别的对象来初始化,就是调用了构造函数;
    
        对象不存在,且用别的对象来初始化,就是拷贝构造函数;
    
     	对象存在,用别的对象来给它赋值,就是赋值函数。
    */
    
    class  A;
    A a;
    A b=a;   //调用拷贝构造函数(b不存在)
    A c(a) ;   //调用拷贝构造函数
     
    /****/
     
    class  A;
    A a;
    A b;   
    b = a ;   //调用赋值函数(b存在)</span>
    
  • 能不能同时用static和const修饰类的成员函数? 博客1博客2

  • 哪些函数不能设置为虚函数:博客1C++中构造函数不能声明为虚函数

     构造函数不能为虚函数的原因:
     假设构造函数为虚函数,虚函数执行依赖于虚函数表,找到虚函数表要通过对象中的vptr指针,
     然而此时该对象构造函数还未执行,vptr指针还没能完成初始化,找不到虚函数表,因此二者矛盾。
     
     静态成员函数不能为虚函数的原因:
     静态成员函数没有this指针,虚函数的实现是为每一个对象分配一个vptr指针指向虚函数表,而vptr是通过this指针调用的,所以不能为virtual。
    
  • 阻止一个类在外部被实例化的方法:博客1博客2

     将类定义为抽象基类或者将构造函数声明为private。
    
     那构造函数为private时要怎么在类内构造对象?
     答:在静态成员函数中创建对象,或者利用友元函数实现。
    

STL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值