重载:
只有在
同一类定义中的同名成员函数才存在重载关系 ,主要特点是
函数的参数类型和数目有所不同 ,但
不能出现函数参数的个数和类型均相同 ,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致的。另外,重载和成员函数是否是虚函数无关
覆盖:
在
派生类中覆盖基类中的同名函数,要求两个函数的
参数个数、参数类型、返回类型都相同,且基类函数必须是虚函数。
隐藏:
派生类中的函数屏蔽了基类中的同名函数,
2个函数参数相同,但基类函数不是虚函数(
和覆盖的区别在于基类函数是否是虚函数)。2个函数参数不同,无论基类函数是否是虚函数,基类函数都会被屏蔽(
和重载的区别在于两个函数不在同一类中)。
int main(){
int i=-2147483648;
return printf("%d,%d,%d,%d",~i,-i,1-i,-1-i);
}
正数原码、反码、补码形式一致。
负数反码,为其原码的符号位不变,其他位取反;
负数补码,是其反码加1。
举例8bit有符号型整数:
+34原码=反码=补码:00100010
-34原码=10100010,反码=11011101,补码=11011110
==================================
不管是在32还是在64位编译器处理下,int都是4字节32位,所以整数范围是-2147483648~2147483647,数值以补码形式存储。
【注意】最小负数-2147483648=-2
31
并没有原码和反码,只有补码,由 -0的原码
1 0...0(31个0) 表示 。
因此:
1、~i:对每一位
取反运算。为
01...1(31个1),是正数,补码即原码,即2
31-1=2147483647;
2、
-i:
对该数求补运算,即【每位】取反运算,再加1。取反,
10...0(31个0)->
01...1(31个1),再加1得
10...0(31个0),
该
补
码表现为
最小负数- 2147483648,并没有原码和反码;
3、1-i:补码形式相加,再推回原码得十进制结果。-i(
10...0(31个0) )+(
0 ...1(31个0) )=
10...1(30个0),此为补码形式,
补码转
原码为补码减1,再非符号位取反,即原码
1...1(32个1)= -(2
31-1)= - 2147483647
;
4、
-1-i
:补码形式相加,再推回原码得十进制结果。即-i(
10...0(31个0) )+(
1 ...1(32个1) )=
01...1(31个1),是正数形式,原码即补码,为2
31-1= 2147483647 。
以下哪种语法在C++中是错误的?其中X为一C++类
const X * xX const * xconst X const * xX * const x
这里大X表示类,小写x代表实例。
其实考的是const用法:在X *x这个经典语句中,const插到*前面还是*后面的区别。
AB没有区别,const在*号前面,都表示*x不可修改。
C中*号前面两个const,g++编译器也提示duplicate 'const',所以C的语法是错的。
D中const在*号后面,表示x指针不可修改。运行 会提示x需要初始化。 const类型的指针声明时必须初始化
转载请注明原文地址: https://ju.6miu.com/read-3979.html