腾讯的不定项选择真的很忧伤,我都没法确定笔试能不能过了。
好的,下面我们来复习cpp,大概花一周时间,主要包括sizeof、多态、引用、指针、内联等
使用一个static变量,然后创建一个n的数组,static就会累加
2 赋值操作符重载
CMyString& CMyString::operator =(const CMyString &str)
{
if(this == &str)
return *this;
delete []m_pData;
m_pData = NULL;
m_pData = new char[strlen(str.m_pData) + 1];
strcpy(m_pData, str.m_pData);
return *this;
}
3 cpp设计不能被继承的类:
4 const和static不能同时修饰一个函数:
C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数<类名> *const this
5 static用法
6 const
7 关于sizeof,32位机器和64位机器
sizeof(int)=4、4
sizeof(char)=1、1
char[10] sc = "abc";
char[]sn = "1vd54"
sizeof(sc) = 10;
sizeof(sn)=6;
sizeof(int*)=4、8
sizeof(char*)=4、8
char *p ="123456";
sizeof(p)=4;
sizeof(long)=8、8
sizeof(long long)=8、8
class A{};//1
class B{//1
public:
B(){}
~B(){}
};
class C{//4 虚函数指针
public:
C(){}
virtual ~C(){}
};
8 初始化顺序
class A{
int n1;
int n2;
A():n2(0),n1(n2+2){
}
};
Visual Studio 2010:
输出n1是一个随机的数字,2为0。n在C++中,成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关。因此在这道题中,会首先初始化n1,而用于初始化n1的参数n2还没有初始化,是一个随机值,因此n1就是一个随机值。初始化n2时,根据参数0对其初始化,故n2=0。
9 拷贝构造函数,必须使用引用作为参数
10 函数返回局部数组
char * get1(){
char p[] = "fd";这里的数组被回收
return p;
}
char * get2(){
char * p = "fd";
return p;
}
11 关于虚析构
如果父类的指针,指向子类的对象
此时必须将父类的析构函数设为虚析构,否则delete父类指针时,只会调用父类的析构器,而不会调用子类的析构
12 STL容器vector,queue,map,
map是排好序的
13 满二叉树的节点一共699个,则叶子数?
n0 = n2+1;
n = n0+n1+n2 = 699
其中n1 = 0或者n1 = 1,显然这个n1=0
所以,n2 = 349,n0=350
14 内联函数
在所有类说明中,内部定义的成员函数都是内联函数
内联函数不能为虚函数,因为内联是静态的概念
15 散列函数
直接定址法、数字分析法、乘余取整法、平方取中法
16 引用
不能返回局部变量的引用
不能返回函数内部new分配的引用,会造成memory leak
17 联合
union
{
int i;
char x[2];
}a;
a.x[0]=10;
a.x[1]=1;
printf("%d",a.i); 266
18 实现strcpy
#include<cassert>
char* strcpy(char* strDest,constchar* strSrc)
{
assert(strDest && strSrc); // 2分
char* cp = strDest; // 2分
while (*cp++ =*strSrc++) // 2分
;
return strDest; // 2分
}
19 new和malloc
20 初始化