1、模板函数和强制类型转换问题
template
T fun(T x,T y)
{
return x*x + y*y;
}
fun(1, 2) 对
fun(1.0, 2) 错
fun
2、定义数组时,元素个数参数的表达问题
一维数组的定义方法: 元素类型 数组名[E];
其中E只能是整型常量表达式。
例如: int a[2];
但是这样就不可以:int x=2, y=3; int a[x+y]; 错误的定义
这样就对了:const int x=2, const int y=3; int a[x+y]; 正确的定义
3、 多态(静态绑定和动态绑定)
1)一种是依靠函数重载实现的静态绑定;
2)一种是依靠虚函数实现的动态绑定,动态绑定跟对象的引用类型无关,他会根据具体的对象调用对 应的方法。
定义
静态类型:对象在声明时采用的类型,在编译期既已确定;
动态类型:通常是指一个指针或引用目前所指对象的类型,是在运行期决定的;
静态绑定:绑定的是静态类型,所对应的函数或属性依赖于对象的静态类型,发生在编译期;
动态绑定:绑定的是动态类型,所对应的函数或属性依赖于对象的动态类型,发生在运行期;
区别
1)静态绑定发生在编译期,动态绑定发生在运行期;
2)对象的动态绑定类型可以更改,但是静态绑定类型无法更改;
3)要想实现动态,必须使用动态绑定;
4)在继承体系中只有虚函数使用的是动态绑定,其他的全是静态绑定。
4、二维数组指针
例如: int Sec[2][3] = {4,6,3,7,2,7};
int **p = Sec;
5、结构体字节数计算
需要按照高位对齐来进行计算
例:struct X { short s; int i; char c; }
则sizeof(X) 值为:因为int占四个字节,short占两个字节,char占一个字节,所以他们都应该满足高位对齐即:4+4+4=12
sizeof(X)=12;
6、判断一个双精度浮点数
if(abs(f) <= 1e-15);
7、C++语言能否定义字符串变量?
8、对于double类型的舍入误差
例题:
以下数字在表示为double(8字节的双精度浮点数)时存在舍入误差的有()。
A、2的平方根
B、10的30次方
C、0.1
D、0.5
E、100
解析:
A. 2的平方根,本身就是无限小数,因此肯定有舍入误差
B. 10的30次方,明显超出了double的数据存储范围(10^30 > 2^64),故有舍入误差
C. 0.1不能用2的负整数次方来表示,因此有误差
D. 0.5 = 2^(-1),因此没有误差
E. 100的二进制表示是:0110 0100,因此没有误差
9、putchar、getchar、puts、gets的运用
(1)使用getchar()函数取得使用者输入的一个字符
#include
int main()
{
char a,b;
a=getchar();
b=getchar();
putchar(a);
putchar(b);
putchar('\n');
return 0;
}
得到的结果
(2)使用putchar()输出一个字符
#include
int main()
{
char a1='A',b1='B';
int a2=65,b2=66;
putchar(a1);
putchar(b1);
putchar('\n'); //换行符也是一个字符
putchar(a2); //输出为A,即该函数会自动强制转化为char型
putchar(b2);
putchar('\n');
return 0;
}
输出结果
(3)使用gets()获得输入的整个字符串,使用puts()输出整个字符串
#include
#include
int main()
{
char a[20];
puts("输入的字符是:");
gets(a);
puts("存入的字符是:");
puts(a);
system("pause");
return 0;
}
输出显示结果:
10、类型(int、float、double)的自动转换
如果int型与float型与double型进行运算,则把int型和float型转换为double类型,然后进行运算,结果是double类型,具体转换如下:
11、 在结构化程序设计中,模块划分的原则是:
模块内具有高内聚度(类的内部操作细节自己完成,不允许外部干涉),模块间具有低耦合度(仅暴露少量的方法给外部使用),即高内聚、低耦合。
12、运算符优先级
运算符优先级顺口溜:淡云一笔,鞍落三服。
淡:单目运算符;
云:算数运算符;
一:移位运算符;
笔:比较运算符;
鞍:按位运算符;
落:逻辑运算符;
三:三目运算符;
服:赋值运算符。
13、C\C++语言中,函数值的返回类型
14、‘\0‘的解释
15、malloc()函数、calloc()函数、realloc()函数、new运算符
在内存的动态空间分配区域中分配一个长度为size的连续空间,如果分配成功,则返回分配内存空间的首地址;否则返回 NULL,申请的内存不会进行初始化;
按照所给的数据个数和数据类型所占的字节数,分配一个 num*size连续的空间,calloc()函数申请内存空间后,会自动初始化内存空间为0,但是malloc()不会进行初始化,其内存空间存储是一些随机数据。
动态分配一个长度为size的内存空间,并把内存空间的首地址赋值给ptr,把ptr内存空间调整为size,申请的内存空间不会进行初始化。
new是动态分配内存的运算符,自动计算需要分配的内存,在分配类类型的内存空间时,同时调用类的构造函数,对内存空间进行初始化,即完成类的初始化工作。动态分配内置类型是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量都不进行初始化。
16、友元函数和成员函数重载运算符