面试时,所问到的东西。
1.接口定义的规范是什么?
2.stl中map的原理,和时间复杂度是什么?
3.mfc中document类和view类联系
4.函数重载
5.函数覆盖,函数覆盖与虚函数之间的关系
很久之前就听人建议C和C++精通一个就行,算法才是灵魂,而去网龙面试却问到这么多我不擅长的东西。直接出局了。
由于个人原因,导致我丧失了一次一次机会,我也很是遗憾。其实里面有些公司,还是很对我的胃口的。
还是静下心来,温习一下C++吧,毕竟以前也很常用,很容易就熟练了。
可惜C++需要记忆的东西太多。。。这是我不喜欢它的原因之一。。。
可现在我又有什么别得选择呢,现在每一次机会,我都得把握住,否则真得失业了。
下面记录一下,我比较薄弱,或者说是我以前的知识漏洞吧!
1.1 I/O,cin,cout
略
1.2 注释
c++中的注释不可嵌套
/*/**/*/会出错,原因是,把/*/**/识别为注释,而*/则是半个注释符,故语法错误。
1.4控制语句
while (std::cin >> value);
使用
istream 对象作为条件,结果是测试流的状态。如果流是有效的(也就是说,如果读入下一个输入是可能的)那么测试成功。遇到
文件结束符或遇到无效输入时,如读取了一个不是整数的值,则
istream 对象是无效的。处于无效状态的
istream 对象将导致条件失败。
从键盘输入文件结束符:
windows下ctrl+z unix下ctrl+d
2.1
C++ 是静态类型(statically typed)语言,在编译时执行类型检查。
一些程序设计语言,特别是 Smalltalk 和 Python,在
运行时才检查语句中对象的类型。
基本内置类型:整数、浮点数、单个字符和布尔值的
算术类型,
void 的特殊类型.
字符类型:char(单字节),wchar_t(双字节)
整形:short半字长,int字长,long一个或两个字长
bool 类型表示真值
true 和
false,0为false,非零为true,占据一个字节
在二进制表示中,计算机是无类型区别的。
unsigned,无符号类型。
怎么判断类型的取值范围范围?
#include <iostream> using namespace std; /* 输入一个整形变量(bool型除外),让你输出它可能的取值范围 */ template<typename T> void cal_limit(T t){ cout<<typeid(t).name(); if((T)(t^~t)>=0)//无符号整形
cout<<": 0~"<<(T)(t^~t)-0<<endl;//最小为0,最大所有位为1,-0是为了输出char类型的数值
else//有符号整形
cout<<": "<<(T)(1<<sizeof(T)*8-1)-0<<"~" <<(T)~(1<<sizeof(T)*8-1)-0<<endl; //最小为首位为1其他位为0,最大是首位为0其他位为1
} int main(){ char a; unsigned char b; short c; unsigned short d; int e; unsigned int f; long g; unsigned long h; cal_limit(a); cal_limit(b); cal_limit(c); cal_limit(d); cal_limit(e); cal_limit(f); cal_limit(g); cal_limit(h); }
|
2.2转义符
\ooo,三个八进制数,可以表示ascii码,数字必须是0~7,三个数字组成的数小于400(八进制,等价于十进制的256)
\xddd三个十六进制数,类似上,必须小于0x100(256)
奇怪的C++语法
int main(){ co\ ut<\ <"he\ llo"; } 等价于 int main(){ cout<<"hello"; } 只是比较难以阅读,少用为秒,这种方式一般在很长的宏里用到。
|
2.3.1
左值:左值可以出现在赋值语句的左边或右边。
右值:右值只能出现在赋值的右边,不能出现在赋值语句的左边。
初始化:int ival(1024);//直接初始化
int ival=1024;//复制初始化
直接初始化语法更灵活且效率更高。
内置类型变量的初始化
在函数体外定义的变量都初始化成 0,在函数体里定义的内置类型变量不进行自动初始化。除了用作赋值操作符的左操作数,未初始化变量用作任何其他用途都是没有定义的。
类类型变量的初始化
如果定义某个类的变量时没有提供初始化式,这个类也可以定义初始化时的操作。它是通过定义一个特殊的构造函数即默认构造函数来实现的。这个构造函数之所以被称作默认构造函数,是因为它是“默认”运行的。如果没有提供初始化式,那么就会使用默认构造函数。不管变量在哪里定义,默认构造函数都会被使用。
std::string global_str;//初始化为"" int global_int;//初始化为0 int main() { int local_int;//未初始化 std::string local_str;//初始化为"" // ...
return 0; }
|
2.3.5. 声明和定义
变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern:
extern int i;//声明,而未定义 int i;//声明并且定义
|
在 C++ 语言中,变量必须且仅能定义一次,而且在使用变量之前必须定义或声明变量。
作用域:
局部作用域 int foo(){ int a; }
全局作用域 int b; int main(){}
语句作用域 while(1) int c;
类作用域 class A{ private: int d; };
命名空间作用域namespace my{ int e; }
const
与其他变量不同,除非特别说明,在全局作用域声明的 const 变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。
通过指定 const 变更为 extern,就可以在整个程序中访问 const 对象:
引用
严格来说,“const 引用”的意思是“指向 const 对象的引用”。类似地,程序员使用术语“非 const 引用”表示指向非 const 类型的引用。
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(1580) | 评论(0) | 转发(0) |