网龙面试后的思考----开始读C++ primer

面试时,所问到的东西。
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 类型表示真值 truefalse,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) |
0

上一篇:网龙笔试

下一篇:再说链表逆序

给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值