蒋豆芽的面试题专栏(8/C++类)

  1. 说说 C++中 struct 和 class 的区别⭐⭐⭐⭐⭐

  2. 说说C++结构体和C结构体的区别⭐⭐⭐⭐⭐

  3. nullptr调用成员函数可以吗?为什么?⭐⭐⭐⭐⭐

  4. 析构函数必须为虚函数吗?构造函数可以为虚函数吗?⭐⭐⭐⭐⭐

  5. 构造与析构的顺序⭐⭐⭐⭐⭐

  6. 请说说你对多态的理解⭐⭐⭐⭐⭐

  7. 重载和重写的区别⭐⭐⭐⭐⭐

  8. 可以通过引用实现多态吗?⭐⭐⭐⭐⭐

=========================================================================================================

  • 本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。
  • 本专栏适合于互联网C++软件开发、嵌入式软件求职的学生或人士。
  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵
  • 针对于非科班同学,建议学习本人专刊文章《蒋豆芽的秋招打怪之旅》,该专刊文章对每一个知识点进行了详细解析。
  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。

=========================================================================================================

  1. 说说 C++中 struct 和 class 的区别⭐⭐⭐⭐⭐

    1. struct 一般用于描述一个数据结构集合,而 class 是对一个对象数据的封装;

    2. struct 中默认的访问控制权限是 public 的,而 class 中默认的访问控制权限是 private 的,例如:

      struct A{
          int iNum;    // 默认访问控制权限是 public
      }
      class B{
          int iNum;    // 默认访问控制权限是 private
      }
    3. 在继承关系中,struct 默认是公有继承,而 class 是私有继承;

    4. class 关键字可以用于定义模板参数,就像 typename,而 struct 不能用于定义模板参数,例如:

      template<typename T, typename Y>    // 可以把typename 换成 class 
      int Func(const T& t, const Y& y) { 
          //TODO 
      }
  2. 说说C++结构体和C结构体的区别⭐⭐⭐⭐⭐

    (1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。

    (2)C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。

    (3)C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。

    (4)C 中使用结构体需要加上 struct 关键字,或者对结构体使用 typedef 取别名,而 C++ 中可以省略 struct 关键字直接使用。

  3. nullptr调用成员函数可以吗?为什么?⭐⭐⭐⭐⭐

    能。

    原因:因为在编译时对象就绑定了函数地址,和指针空不空没关系。

    答案解析

    //给出实例
    class animal{
    public:
        void sleep(){ cout << "animal sleep" << endl; }
        void breathe(){ cout << "animal breathe haha" << endl; }
    };
    class fish :public animal{
    public:
        void breathe(){ cout << "fish bubble" << endl; }
    };
    int main(){
        animal *pAn=nullptr;
        pAn->breathe();   // 输出:animal breathe haha
        fish *pFish = nullptr;
        pFish->breathe(); // 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

- 本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。 - 本专栏特点: 本专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,总结出了高频面试考点(附有答案)共计309道,事半功倍,为大家春秋招助力。 - 本专栏内容分为七章:共计309道高频面试题(附有答案)

全部评论
多态:即多种形态,基类指针或者引用可以代表所有派生的对象,它足够智能,可以分辨出每一个派生(孩子)。内部实现靠虚函数指针(vptr)和虚函数表(vtbl) 1. 含有虚函数的对象实例中,内存布局的起始地址位置会额外添加虚函数指针vptr(void**,指向虚函数表vtbl),所有内存布局会额外多出4Byte(32位)或者8Byte(64位) 2. 同一个类不同的实例,共享同一个虚函数表(虚函数表是全局的) 3. 单继承类中重写的虚函数替换虚函数表的函数地址,新的虚函数会追加到虚函数表中 4. 多继承中每一个基类会有一个虚函数表,但是派生中的虚函数只会覆盖、追加到第一张虚函数表中。如下图,派生类继承两个基类,派生类中的虚函数只会修改第一张虚函数
点赞 回复 分享
发布于 2021-04-21 17:47
大家可以关注我,以后还有更多的原创内容推送
点赞 回复 分享
发布于 2021-03-11 16:54

相关推荐

叁六玖:有阿里妈妈,那有不有阿里爸爸
求职遇到的搞笑事件
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务