c++知识点总结(1)

重载:

    只有在 同一类定义中的同名成员函数才存在重载关系 ,主要特点是 函数的参数类型和数目有所不同 ,但 不能出现函数参数的个数和类型均相同 ,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致的。另外,重载和成员函数是否是虚函数无关

覆盖:
    派生类中覆盖基类中的同名函数,要求两个函数的参数个数、参数类型、返回类型都相同,且基类函数必须是虚函数。

隐藏:
  
派生类中的函数屏蔽了基类中的同名函数,
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=-231 并没有原码和反码,只有补码,由 -0的原码 1 0...0(31个0) 表示 。
因此:
1、~i:对每一位 取反运算。为01...1(31个1),是正数,补码即原码,即231-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)= -(231-1)= - 2147483647 
4、 -1-i :补码形式相加,再推回原码得十进制结果。即-i( 10...0(31个0) )+(1 ...1(32个1) )= 01...1(31个1),是正数形式,原码即补码,为231-1= 2147483647 。

以下哪种语法在C++中是错误的?其中X为一C++类
    • const X * x
    • X const * x
    • const X const * x
    • X * const x
这里大X表示类,小写x代表实例。
其实考的是const用法:在X *x这个经典语句中,const插到*前面还是*后面的区别。
AB没有区别,const在*号前面,都表示*x不可修改。
C中*号前面两个const,g++编译器也提示duplicate 'const',所以C的语法是错的。
D中const在*号后面,表示x指针不可修改。运行 会提示x需要初始化。 const类型的指针声明时必须初始化

posted on 2017-03-08 16:30  lantx  阅读(168)  评论(0编辑  收藏  举报