C++面试常见问题整理汇总分享

—-想了解C++面试常见问题整理汇总分享的全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

C++面试常见问题整理汇总分享总结讲述了C++面试常见问题。分享给大家供大家参考,具体如下:

1. 继承方式

public      父类的访问级别不变
protected    父类的public成员在派生类编程protected,其余的不变
private        父类的所有成员变成private

  #include <iostream>  using namespace std;  class base  {    public:      void printa()      { cout <<"base"<< endl; }    protected:      void printhello()      { cout <<"helo"<< endl; }    private:      void printnohello()      { cout <<"no hello"<< endl; }  };  class derived : public base  {    public:      void printb() { printhello(); }      // void printc() { printnohello(); } //printnohello是父类的私有函数,不可访问  };  int main()  {    base a;    a.printa();    //a.printhello(); //printhello是类derived的protected函数,不可访问。  }    

2. sizeof 和 strlen 的区别

① sizeof 是一个操作符,strlen 是库函数。
② sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾为‘ 0‘的字符串作参数。
③ 编译器在编译时就计算出了sizeof 的结果。而strlen 函数必须在运行时才能计算出来。并且 sizeof计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。
④ 数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。

  #include <iostream>  #include <cstdlib>  #include <cstring>  using namespace std;  int main()  {    int a[] = {1, 2, 3, 4, 5};    cout << sizeof(a) << endl; //20  //  cout << strlen(a) << endl;    char b[] = {'a', 'b'};    cout << strlen(b) << endl; //6    cout << sizeof(b) << endl; //2  }    

3. C中的 malloc 和C++中的 new 有什么区别

new、delete 是操作符,可以重载,只能在 C++中使用。
malloc、free 是函数,可以覆盖,C、C++中都可以使用。
new  可以调用对象的构造函数,对应的 delete 调用相应的析构函数。
malloc 仅仅分配内存,free 仅仅回收内存,并不执行构造和析构函数
new、delete 返回的是某种数据类型指针,malloc、free 返回的是 void 指针。

注意:malloc 申请的内存空间要用 free 释放,而 new 申请的内存空间要用 delete 释放,不要混用。

因为两者实现的机理不同。

4.1. c/c++中static

要理解static,就必须要先理解另一个与之相对的关键字auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的。auto的含义是由程序自动控制变量的生存周期,通常指的就是变量在进入其作用域的时候被分配,离开其作用域的时候被释放;而static就是不auto,变量在程序初始化时被分配,直到程序退出前才被释放;也就是static是按照程序的生命周期来分配释放变量的,而不是变量自己的生命周期;所以,像这样的例子:

  void func()  {    int a;    static int b;  }  

每一次调用该函数,变量a都是新的,因为它是在进入函数体的时候被分配,退出函数体的时候被释放,所以多个线程调用该函数,都会拥有各自独立的变量a,因为它总是要被重新分配的;而变量b不管你是否使用该函数,在程序初始化时就被分配的了,或者在第一次执行到它的声明的时候分配(不同的编译器可能不同),所以多个线程调用该函数的时候,总是访问同一个变量b,这也是在多线程编程中必须注意的!

static的全部用法:

1.类的静态成员:

  class A  {    private:      static int s_value;  };    

在cpp中必须对它进行初始化:

  int A::s_value = 0; // 注意,这里没有static的修饰!  

类的静态成员是该类所有实例的共用成员,也就是在该类的范畴内是个全局变量,也可以理解为是一个名为A::s_value的全局变量,只不过它是带有类安全属性的;道理很简单,因为它是在程序初始化的时候分配的,所以只分配一次,所以就是共用的;

类的静态成员必须初始化,道理也是一样的,因为它是在程序初始化的时候分配的,所以必须有初始化,类中只是声明,在cpp中才是初始化,可以在初始化的代码上放个断点,在程序执行main的第一条语句之前就会先走到那;如果你的静态成员是个类,那么就会调用到它的构造函数;

2.类的静态函数:

  class A  {    private:    static void func(int value);  };    

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/487959.html

(0)
上一篇 2020年11月12日
下一篇 2020年11月12日

精彩推荐