面试心得小结

本文深入探讨了C++中的关键概念,包括const特性、自增运算符的行为、static成员的作用、构造函数调用顺序、智能指针实现原理、时间测量方法、转义字符的应用、二叉树操作复杂度以及string类的使用技巧。

一 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];就二者均可进行修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值