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(); // 输出:fish bubble
        return 0;
    }  

    原因:因为在编译时对象就绑定了函数地址,和指针空不空没关系。pAn->breathe();编译的时候,函数的地址就和指针pAn绑定了;调用