面试心得小结

    技术2022-05-19  18

    一 const

    const必须在初始化赋值,不能在初始化之后赋值。const指针在赋值时必须类型一致。如果是const 指针,那么不能对指针赋值,int *const v=&k;v=&k;//error *v=k//right

    同理,如果是指向const int 类型的指针,*v=k//error

    二自增:

    后置自增返回的是原先的操作数。int k=2;if((k++)==3)  {  cout<<k;  }

    结果是不会输出的。但是如果k++;  if((k)==3)  {  cout<<k;  }

    结果是输出。所以如果后置++在函数里 直接返回的话 returnk++;k是不会变化的。

    三 static

    static的成员 在类中,不管是对象还是指针,都没有指向它。

    四 构造函数  类成员中含有另一个类对象,这个类有构造函数时,会先调用该;类的构造函数 在调用自己类的构造函数   有继承时,会先调用基类的构造函数,以下为例

    class Base{public: Base(){cout<<"Base"<<endl;}};class A{public: A(){cout<<"A"<<endl;}};class B{public: B(){cout<<"B"<<endl;}};class C{public: C(){cout<<"C"<<endl;}};class D{public: D(){cout<<"D"<<endl;}};class DE1:public Base{

    public: A a;B b; DE1(){cout<<"DE1"<<endl;}};class DE2:public DE1{public: C c;D d; DE2(){ cout<<"DE2"<<endl; }};

    输出结果为Base A B DE1 C D DE2;

     五 智能指针的实现(不包括自引用问题)

    class CountClass{public: int CountInt; int * CountPtr; CountClass(int * p):CountInt(1),CountPtr(p){} ~ CountClass(){delete CountPtr;}

    };class UserClass{public: CountClass * cc; int user; UserClass& operator = (const UserClass &uc); UserClass(int x,int *p):cc(new CountClass(p)),user(x){} UserClass(const UserClass &uc):cc(uc.cc),user(uc.user){    ++cc->CountInt; }

      ~ UserClass(){  if((--cc->CountInt)==0)  delete cc; }};UserClass& UserClass::operator = (const UserClass &uc){  ++uc.cc->CountInt;  if(--cc->CountInt==0)  delete cc;  cc=uc.cc;  user=uc.user;    return *this;     }

    智能指针接受指向动态分配对象的指针,并负责删除他。只有在撤销了指向共享对象的最后一个指针后,才能删除共享对象。

    六 时间

    include<ctime>

    clock_t start;

    clock();

    七 转义字符

    /加上要转义的符号  大小为1

     八 二叉树

    二叉树的基本操作复杂度为h,h为高度,插入删除的期望高度为lgn

     

     九 string

    #include<string>

    string可用.size()获取string大小  char n='h';string b;b+=n;char *g="jk";b+=g;可运行通过,也就是说这里的string其实既可以当做char使用,也可以当做char*使用,比如  b=n;b=g.都是可编译运行通过的。b[index]是char型哦!

    char * test="test";可以进行的修改是test="fjgljfdk";不可以进行单个的修改,比如test[0]='g';但是如果是 char * test=new test[2];就二者均可进行修改。


    最新回复(0)