【C/C++】知识点
1.C++中的参数传递机制:值传递、指针传递、引用传递
2.C++的内部类和外部类:
一个讲得不错的博客,不过不让转载:C++内部类
3.static 可以修饰局部变量、全局变量和函数。 不可修饰类!
4.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是:出错!友元函数不是成员函数,必须要有参数。
5.以下代码的输出结果是?
main() { char str[]="S\065AB"; printf("\n%d", sizeof(str)); }
答:5 \065是一个8进制数字
6.下面这段代码会打印出什么?
class
A
{
public
:
A()
{
printf(
"A "
);
}
/*virtual*/
~A()
{
printf(
"deA "
);
}
};
class
B
{
public
:
B()
{
printf(
"B "
);
}
~B()
{
printf(
"deB "
);
}
};
class
C:
public
A,
public
B
{
public
:
C()
{
printf(
"C "
);
}
~C()
{
printf(
"deC "
);
}
};
int
main()
{
A *a =
new
C();
delete a;
return
0
;
}
答:
A B C deA
构造函数的执行先执行父类,再执行子类。析构顺序想反
A B的析构函数不是虚函数,所以不会执行子类的虚函数
7. Java, Object-C, C#都是类C语言, python不是
8.
在linux下64位c程序,请计算输出的三个sizeof分别是()
void func(char str_arg[100]) { cout<<sizeof(str_arg)<<endl; } int main(int argc,char* argv[]) { char str[]="Hello"; char *p=str; cout<<sizeof(str)<<endl; cout<<sizeof(p)<<endl; func("test"); return 0; }
6,8,8 64位的指针大小为8, str_arg做形参是一个指针。
9. 重载要求输入参数的个数或者类型发生变化。只有返回值类型不同,不算重载!!
10.下面代码的输出:
char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; char **cp[] = { c+3, c+2, c+1, c }; char ***cpp = cp; int main(void) { printf("%s", **++cpp); printf("%s", *--*++cpp+3); printf("%s", *cpp[-2]+3); printf("%s\n", cpp[-1][-1]+1); return 0; }
答:POINTERSTEW 注意++, -- , *(取值) 的优先级都大于 加减法