1.友元函数的判断发生在编译期,而虚函数绑定发生在运行期
2. Consider the following program
Code:
1. #include <stdio.h>
2. int main()
3. {
4. int a[5] = {1,2,3,4,5};
5. int *ptr = (int*)(&a+1);
6. printf("%d %d" , *(a+1), *(ptr-1) );
7. }
The output for this program is:2 5
解释:(引用)这题的关键是理解a和&a的区别。
a是指向int类型的常量指针。
&a则是指向int [5]的一个指针。相当于int (*p)[5] = &a;
如果你想这样定义的话int *p = &a;
这时VC编译器会提示一个WARNING:'int *' differs in levels of indirection from 'int (*)[5]',也就是说类型不匹配
这道题取得了一个不存在的地址(&a+1)之后,然后强制类型转化为(int *),于是*(p-1)便指向了a的最后一个元素。
a是指向int类型的常量指针。
&a则是指向int [5]的一个指针。相当于int (*p)[5] = &a;
如果你想这样定义的话int *p = &a;
这时VC编译器会提示一个WARNING:'int *' differs in levels of indirection from 'int (*)[5]',也就是说类型不匹配
这道题取得了一个不存在的地址(&a+1)之后,然后强制类型转化为(int *),于是*(p-1)便指向了a的最后一个元素。
a是int的指针类型,令a'=&a则a'应是一个二维的指针变量,分数组a'[0]=a;
,那么a'【0】+1=&a+1=a'【1】;那么强制转化为一维数组后,就可以给ptr;
否则不能编译,(error C2440: “初始化”: 无法从“int (*)[5]”转换为“int *”)
到第六行时就直接把a'【1】-1=a'【0】【5】输出就行
,那么a'【0】+1=&a+1=a'【1】;那么强制转化为一维数组后,就可以给ptr;
否则不能编译,(error C2440: “初始化”: 无法从“int (*)[5]”转换为“int *”)
到第六行时就直接把a'【1】-1=a'【0】【5】输出就行
3."0583" //8进制的数字是0~7(最前面的0表示为八进制),所以不符合要求。
4.
Const int *x;指向常量的指针,所指向的内容不能改变,指针的值可以修改
int *const x;常量指针,指针的值不可以修改,所指向的内容能改变
int *const x;常量指针,指针的值不可以修改,所指向的内容能改变
5.(引用的其他人的文章)
C++嵌套类
1、 嵌套类的名字只在外围类可见。
2、 类的私有成员只有类的成员和友元可以访问,因此外围类不可以访问嵌套类的私有成员。嵌套类可以访问外围类的成员(通过对象、指针或者引用)。
3、 一个好的嵌套类设计:嵌套类应该设成私有。嵌套类的成员和方法可以设为public。
4、 嵌套类可以直接访问外围类的静态成员、类型名(typedef)、枚举值。
5、 嵌套类定义的名字解析过程:
出现在名字使用点前的嵌套类的声明。
出现在名字使用点前外围类的声明。
嵌套类定义前名字空间域的声明。
6、 嵌套类的成员定义中的名字解析过程:
成员函数局部声明。
嵌套类成员的声明。
外围类成员的声明。
成员函数定义前名字空间域中出现的声明。
6.
根据重载规则:运算符后者是该类的成员函数,或者有一个参数的类型是这个类或者是对这个类的引用。=,[],(),->都必须重载为类的成员函数
7.
x = j > 0即为x=(j>0) 如果j>0,x=1,否则x=0;