cpp复习
2014-09-18 12:27
155 查看
腾讯的不定项选择真的很忧伤,我都没法确定笔试能不能过了。
好的,下面我们来复习cpp,大概花一周时间,主要包括sizeof、多态、引用、指针、内联等
1 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
这个题目很无语,知道答案之后就更无语了,最无语的是,我居然还想到了,
使用一个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用法
•用于函数体中:定义语句只会执行一次,但是变量值可以一直持续到程序结束
•用于全局变量:可见性仅限于当前文件
•用于类定义中(静态成员):class_name::x;
–不能在类内部对静态成员进行初始化(C++标准规定,static整型和布尔型可以在声明时初始化)
6 const
•const修饰变量(常量)
–const int* constant1:a variable pointer to a constant integer 指向的值是常量
–int const*constant1:the same as the above
–int* const constant2:a constant pointer to a variable integer 指针是常量
–int const* const constant3:a constant pointer to a constant integer
•const修饰函数返回值
•const修饰成员函数
–在const成员函数定义的地方,通知编译程序该成员函数不会修改对象数据成员的值
–在调用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
•new delete与malloc free的联系与区别?
–都是在堆(heap)上进行动态的内存操作。
–用malloc函数需要指定内存分配的字节数并且不能初始化对象,返回void*
–new 会自动调用对象的构造函数,返回指定类型指针,而且可以重载。
–delete会调用对象的destructor,而free 不会调用对象的destructor
20 初始化
•有哪几种情况只能用intializationlist 而不能用assignment?
–当类中含有const、reference成员变量;
–基类的构造函数都需要初始化表?
–成员对象
•建议:能在初始化列表初始化的就尽量初始。
•C++是不是类型安全的?
–不是。两个不同类型的指针之间可以强制转换(用reinterpret_cast)。C#是类型安全的
好的,下面我们来复习cpp,大概花一周时间,主要包括sizeof、多态、引用、指针、内联等
1 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
这个题目很无语,知道答案之后就更无语了,最无语的是,我居然还想到了,
使用一个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用法
•用于函数体中:定义语句只会执行一次,但是变量值可以一直持续到程序结束
•用于全局变量:可见性仅限于当前文件
•用于类定义中(静态成员):class_name::x;
–不能在类内部对静态成员进行初始化(C++标准规定,static整型和布尔型可以在声明时初始化)
6 const
•const修饰变量(常量)
–const int* constant1:a variable pointer to a constant integer 指向的值是常量
–int const*constant1:the same as the above
–int* const constant2:a constant pointer to a variable integer 指针是常量
–int const* const constant3:a constant pointer to a constant integer
•const修饰函数返回值
•const修饰成员函数
–在const成员函数定义的地方,通知编译程序该成员函数不会修改对象数据成员的值
–在调用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
•new delete与malloc free的联系与区别?
–都是在堆(heap)上进行动态的内存操作。
–用malloc函数需要指定内存分配的字节数并且不能初始化对象,返回void*
–new 会自动调用对象的构造函数,返回指定类型指针,而且可以重载。
–delete会调用对象的destructor,而free 不会调用对象的destructor
20 初始化
•有哪几种情况只能用intializationlist 而不能用assignment?
–当类中含有const、reference成员变量;
–基类的构造函数都需要初始化表?
–成员对象
•建议:能在初始化列表初始化的就尽量初始。
•C++是不是类型安全的?
–不是。两个不同类型的指针之间可以强制转换(用reinterpret_cast)。C#是类型安全的
相关文章推荐
- CPP复习笔记 1
- CPP复习笔记 4
- CPP复习笔记 3
- 高级编程语言复习(Cpp/API/MFC)
- CPP 复习 记录
- Cpp复习(二)
- 高级编程语言复习(Cpp/API/MFC)
- Cpp环境【POJ3320】Jessica's Reading Problem 洁西卡的复习计划
- 根据实例复习Cpp
- Cpp复习(三)template library and c++11
- CPP复习笔记 3
- cpp复习2-类型转换
- cpp复习3-字符串操作
- PHP排序算法的复习和总结
- eclipse_cpp 配置mingw
- 【Modern OpenGL】复习 Review
- Java复习
- 复习(day12)
- 【Struts2复习知识点九】-ModelDriven接收参数
- IT笔试编程部分复习