1、运算符重载
不能被重载的运算符只有五个,分别是
1. . (成员访问运算符)
2. * (成员指针访问运算符)
3. :: (域运算符)
4. sizeof (长度运算符)
5. ?: (条件运算符)
前两个运算符不能重载是为了保证访问成员的功能不被改变 ,域运算符和sizeof运算符的运算对象是类型而不是变量或者一般表达式,不具备重载的特征。
2、赋值运算符的优先级
算术运算符>关系运算符>逻辑运算符
举个例子:
if
(a+b>c && d-e<f) 不需要括号调整优先级
先加减乘除
再比较大小
最后判断真假
1 () [] . ->
2 ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof
3 * / %
4 + -
5 >> <<
6 > >= < <=
7 == !=
8 &
9 ^
10 |
11 &&
12 ||
13 ?:
14 = += -= *= /= %= |= ^= &= >>= <<=
15 ,
就着多吧 结合性:2 13 14 是从右至左 其他都是 从左至右有问题可以在交流的
口诀为
括号成员第一; //括号运算符[]() 成员运算符. ->
全体单目第二; //所有的单目运算符比如++、 --、 +(正)、 -(负) 、指针运算*、&乘除余三,加减四; //这个"余"是指取余运算即%
移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等
等于(与)不等排第七; //即== 和!=
位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|)
"三分天下"八九十;
逻辑或跟与; //逻辑运算符:|| 和 &&
十二和十一; //注意顺序:优先级(||) 低于 优先级(&&)
条件高于赋值, //三目运算符优先级排到13 位只比赋值运算符和","高
逗号运算级最低! //逗号运算符优先级最低
3、字符串操作常用函数
stract( 字符数组1,字符数组2)串连函数
strcpy/strncpy (字符数组1,字符数组2)复制函数
strcmp( 字符串1,字符串2)字符串比较函数
strlen( 字符数组)测字符数组函数
4、实参与形参
实参可以是任何类型(常量、变量或表达式),形参是变量,或者缺省常量,但不能是表达式
5、
编译不通过主要是语句 this=NULL;
因为类的构造函数中,this 指针的形式为Myclass *const this; 它是一个常量指针,指针的指向不能修改。
6、
A:下面列举的几种情况不能省略模板实参:
1)从模板函数实参表获得的信息有矛盾之处。
2)需要获得特定类型的返回值,而不管参数的类型如何。
3)虚拟类型参数没有出现在模板函数的形参表中。
4)函数模板含有常规形参。
B:类模板与模板类的概念
⑴ 什么是类模板 一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。
如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。
⑵ 模板类是类模板实例化后的一个产物。可以从类模板派生出新的类,既可以派生类模板,也可以派生非模板类。
类模板的重点是模板。表示的是一个模板,专门用于产生类的模子。 模板类的重点是类。表示的是由一个模板生成而来的类。
C:类模板有三种类型模板参数:类型模板参数、无类型模板参数和模板模板参数(以模板作为模板的参数)。并不局限于虚拟类型,非虚拟类型也可以作为类模板参数。
7、大端与小端
0x1234
0x12:高位
0x34:低位
结构体中,先声明的是低地址,后声明的是高地址
m:低地址
n:高地址
大端:低位放在高地址:0x34---->n
小端:高位放在高地址:0x12---->n
x.z.n表示联合体x中结构体z内的变量n
8、C语言中for(;;)是什么意思?
该循环是死循环,for后的圆括号中,第一个分号前的内容是执行第一次循环前执行的,第二个分号前的内容是每次执行前都要判断的(如果该处表达式的值为真,那么执行循环体,如果为假,那么就跳出循环体),第二个分号后的内容是每执行完一次循环体后执行的。 停止的方法在循环体中使用break跳出循环体。
9、C语言中%d,%o,%f,%e,%x的意义
格式说明由“%”和格式字符组成,如%d%f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“%”字符开始的。不同类型的数据用不同的格式字符。
格式字符有d,o,x,u,c,s,f,e,g等。
如
%d整型输出,%ld长整型输出,
%o以八进制数形式输出整数,
%x以十六进制数形式输出整数,
%u以十进制数输出unsigned型数据(无符号数)。
%c用来输出一个字符,
%s用来输出一个字符串,
%f用来输出实数,以小数形式输出,
%e以指数形式输出实数,
%g根据大小自动选f格式或e格式,且不输出无意义的零。
scanf(控制字符,地址列表)
格式字符的含义同printf函数,地址列表是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。如scanf("%d%c%s",&a,&b,str);
10、c ++中对构造函数有一些规定:
不能带返回值;可以不带参数;也可以缺省定义;构造函数的名字与类名必须完全相同。注意:构造函数可以进行重载,析构函数不可以
11、
若const限定符在*之前,则const限定的是*ptr而不限定ptr。也就是说,ptr可以改变其所指向的对象,但不能通过该指针修改其所指向对象的值。
若const限定符在*之后,则const限定的是ptr而不限定*ptr。也就是说,ptr不可以改变其所指向的对象,但能通过该指针修改其所指向对象的值。
若在*之前有const限定符且在*之后也有const限定符,则ptr与*ptr都被限定。也就是说,ptr既不可以改变其所指向的对象,也不能通过该指针修改其所指向对象的值。
另外:只要 在*之后有 const限定符,则该指针在声明时必须初始化。
12、
fprintf函数只能以字符串的形式写入到文件中;fread函数则是从文件中读数
据,而不是写数据;fputc函数是以字符的形式写到文件中:而fwrite函数则是将某数以其
机器数的形式写入到文件中。
13、运算符&与&&,|与||的区别
(1)逻辑与当&与&&同为逻辑运算符时,它们都用于连接两个Boolean类型的表达式,当&和&&的两端表达式同时为真时,表达式的结果为真,只要有一端为假,那么表达式结果为假。
逻辑运算符&与&&的区别是:
& 无论左边结果是什么,右边还是继续运算;
&&当左边为假,右边不再进行运算。
但是两者的结果是一样的。
当|和||的两端表达式同时为假时,表达式的结果为假,只要有一端为真,那么表达式结果为真。
所以同理,我们可以知道|与||的区别:
| 无论左边结果是什么,右边还是继续运算;
||当左边为真,右边不再进行运算。
但是两者的结果是一样的。
所以&&和||是比较高效那么一点点。
(2)按位与&,双目运算符:将两个表达式的值按二进制位展开,对应的位(bit)按值进行“与”运算,结果保留在该位上…
比如170&204
对应二进制就是
10101010B
&11001100B
=10001000B…
该位只要有一个值为0结果为0,否则结果为1。
14、C 语言中的文件类型只有( ASCII码文件和二进制文件两种)
从文件编码的方式来看,文件可分为ASCII码文件(文本文件)和二进制文件两种。ASCII码文件可在屏幕上按字符显示的,例如源程序文件就是ASCII码文件,由于按字符显示,可以识别;二进制文件是按二进制的编码方式来存放文件的,二进制文件虽然也可以在屏幕上显示,显示为乱码。
15、string中length()和size()的区别
c++中的size()和length()没有区别
如:
string str="hello world";
cout <<"str.length()="<<str.length()<<endl;//结果为12
cout <<"str.size()="<<str.size()<<endl;//结果为12
为了兼容,这两个函数一样。 length()是因为沿用C语言的习惯而保留下来的,string类最初只有length(),引入STL之后,为了兼容又加入了size(),它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL的算法。 string类的size()/length()方法返回的是字节数,不管是否有汉字。
16、C/C++库函数(tolower/toupper)实现字母的大小写转换
tolower(s) == tolower(str[i])
17、如何利用c++ cout如何输出不同进制,二进制需要自己编写函数
cout<<hex<<i<<endl; //输出十六进制数
cout<<oct<<i<<endl; //输出八进制数
cout<<dec<<i<<endl; //输出十进制数
18、强制类型转换
强制类型转换运算是一种严格取整运算,它的原则不是四舍五入,对于小数,最后的返回都会是整数部分,在C语言中强制类型转换是用括号加类型符如(int)a,标准C++的强制类型转换是static_cast<int>(a);
19、函数调用进行读写操作命令
fopen("A:\\user\\abc.txt","r+")
打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
rb+ 读写打开一个二进制文件,只允许读写数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。