• C++ 面试基础


    1.Static 

    Staic特点:只初始化一次,存在静态区,区别于Auto 变量,存在于栈中(函数结束,也就销毁)。

    类内的staic:静态数据成员必须在类外初始化,静态成员函数只能调用静态变量,两者都不能用this指针调用。

    2.Const

    const int *a== int const* a a可变,a指向的对象不可变

    int* const a : a不可变,指向对象可变

    3.Switch

    switch 的break 如果不写,就会在满足改条件的语句一直执行,直到break,或者函数结束;

    4.为什么:

    char str1*=“abc”;

    char str*2=“abc”;

    str1==str2成立? abc 存储在常量区域,大多数编译器都会把相同的常量只保持1份拷贝,所以str1和str2指向的地址是相同的。

    5.Assert

    Assert和assert的区别:前者在Debug版本中有,在Relase 版本不存在,而assert 都会存在;

    #define NDEBUG 可以禁止调用宏;

    6.enum

    enum(a,b=1,c,d=2,e) == 0,1,2,2,3

    7.argc和argv[]

    (Test.c)int main (int argc,int*argv[]){.....}

    命令行输入: Hong bi yue I 

    argv[]=[Test, Hong,bi,yue,I ];

    argc=5;

    8.main 函数结束后

    main 函数结束后,如果还想继续执行代码,可以再析构函数里面执行

    9.++

    a.

    *p++ : *p -> p++ 地址加;

    (*p)++ : (*p)++ 值加;

    b.

    s++=5 :错误,先执行取a的地址,装入寄存器,然后临时变量为a的值加1,程序不允许对临时变量赋值;

    ++s=5 :正确,取a地址,内容+1,放入寄存器;

    10.浮点数的注意事项:

    float a,b,c;

    1.if(a==0): 浮点数存在精度问题,不是一个确切的值,需要转化为:>= 或者<=;

    2. a+b=b+a;

     (a+b)+c 不一定等于 :(a+c)+b 浮点运算是不能被结合的 ------------???不懂

    11.String 类实现注意点:

    1.String :: String(const String &another)

    {

       char* m_data;  //以调用strcpy()函数,故用指针

      m_data= new char[strlen(another.m_data)+1]

      strcpy (m.data,another.m_data);

    }

    12.extern 和 export

     注:头文件中一般不定义变量,会引起重复定义,即使用 #ifdef,虽然头文件只被编译了一次,但是变量不只是会定义一次;

    extren int n;

    export template<class T> void f(T& t);

    13 内存分配

    (1)符号起始区块(BSS) :静态数据+ 未初始化的全局数据

    (2)数据段: 静态内存分配,已初始化的全局数据

    (3)代码段:程序执行代码

    (4)堆 :动态分配的内存:malloc 和 new

    (5)栈 :临时创建的局部变量

     14.#include<>和“”

        <>软件设置指定的路径 查找,如果有,直接加载;如果没有,报错(无法找到库文件)。

        “ ”源代码文件(C或CPP文件)所在的文件夹;如果没有,就会在TurboC软件设置指定的路径 ,如果有,直接加载;如果没有,报错(无法找到库文件)。

    15.struct 和class

      struct 变量默认是public,而class 是private

    16. sizeof()

        1.为什么会有sizeof()?

          在访问内存的过程中,地址总线总是按照对齐后的地址来访问,如果编译器对数据存储进行处理会加快读写速度

       2.bool 2,int 4,char 2,类内函数为0,short 2,long 4,double 是8,int f()返回4,空类是1,多重继承的空类是1,虚继承的类是4(涉及虚指针)

        32位系统 char是1位;

       3.{bool a,int b,bool c}=3*4=12; {int a ;bool b,bool c}=2*4=8;

      4.类内存放的静态变量是放在全局数据中的,在sizeof类时,只是计算栈的大小,所以不计算静态变量

      5. char*s[100]="0123456789";

         sizeof(ss)=100;strlen(ss)=10: strlen通过循环,检测到/0结束

    17.数组指针和指针数组

       int a[2][5] ={.......};  int(*b)[5] =a数组指针:*a=&a[0][0],**a=a[0][0];*a+1=&a[0][1];*(a+1)=&a[1][0];

    18.向量容器:

       顺序容器:队成员的顺序访问和随机访问 vector、list、deque

       关联容器:经过优化关键值访问他们的元素 map是key-value形式,set是单值

     set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。Set默认自动排序。使用方法类似list。

    19.多态:

        1.覆盖:多态,面向对象,动态,编译期间并不能确定;重载:函数重载,静态,编译期可以确定,接口重用

        2.定义 基类 Base对象 b 虚函数为show()   b.show();可以调用虚函数Base::show();但是这种调用在编译时进行的是静态连编,没有充分利用虚函数的特性,只有通过基类指针访问虚函数是才能获得运行时的多态性。

        3.虚函数不是必须重载的,但是虚基类(虚基类是为了只实例化一次基类存在的,孙子类继承父类,爷爷类,但是孙子还有叔叔,如果不用虚基类,孙子在继承爷爷类时,就认为有两个爷爷)必须重载

       4.

     20.友元函数

        类内声明的函数,可以访问类内的private数据

     

      

      

  • 相关阅读:
    Expanding Rods(二分)
    Monthly Expense(二分)
    sdut1269 走迷宫(dfs)
    走迷宫(dfs)
    C Looooops(扩展欧几里得+模线性方程)
    41. First Missing Positive
    40. Combination Sum II
    39. Combination Sum
    37. Sudoku Solver
    36. Valid Sudoku
  • 原文地址:https://www.cnblogs.com/chenbaoliang/p/7186672.html
Copyright © 2020-2023  润新知