41.c++中结构体和类可以使用malloc来动态分配内存吗?
不可以,在c++中,结构体和类都必须使用new来建立对象.malloc必须注明申请的空间大小是一个函数,new则不需要,而且它是一个运算符,不但申请了空间,还执行了初始化.
42.那些情况算什么函数重载?
1.参数不同
2.参数类型不同
3.参数顺序不同
注意:参数的返回值不同并不会产生重载,只会产生错误.
43.c++中在一个类中声明一个成员变量为static ,有什么用?
在 C++ 类的成员变量被声明为 static(称为静态成员变量)意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,也就是说不管创建多少对象, static修饰的变量只占有一块内存。其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员(变量或函数)。修饰的变量只占有一块内存。其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员(变量或函数)。 static是加了访问控制的全局变量,不被继承 。
44.C++中为什么用模板类。
1.提高代码的利用率
2.编译的时候不进行类型检查增加了类型的安全性.
45.函数模板和类模板有什么区别
函数模板是由编译器在处理函数调用时候决定的,类模板是由程序员实例时决定的.
46.介绍一下 STL ,详细说明 STL 如何实现vector?
STL是标准模板库,里面包括了常用的容器和算法(vector,map.list,queue,stact)
vector实际上就是一个动态数组,他可以随着数据的增加自增自己的大小.
47.介绍一下模板和容器。如何实现?
模板是实现代码重用的一种重要的工具.常说的泛型编程就是借助模板来编写的.
容器是c++ STL中的类,定义了一些常用的数据结构,顺序表(vector),链表(list),duilie(queue)等.
48.请你谈谈你在类中如何使用 const 的?
1.const修饰变量说明这个是一个常变量.
2.和宏定义的区别:宏定义是全局的,const可以是局部的变量
3.修饰函数参数,如果函数的参数列表中含有const,说明这个参数的值不会改变
4.修饰类中的成员函数,说明这个函数不会改变类中其他成员的值.
49.所有的运算符都可以重载吗?
不可以,有一些运算符是不可以重载的.
例如.?: :: . 等
50.基类的析构函数不是虚函数,会带来什么问题?
子类的成员所占用的内存可能无法释放.
51.不使用if,?:switch,写一个函数判断a和b哪一个大的语句段
(a+b + abs(a-b) ) / 2
52.不使用第三个变量,交换整数a和b的值?
a = a + b;
b = a - b;
a = a - b ;
53.如何打印源程序文件名和源程序的行号?
c++和c语言中有很多系统的宏定义,这些宏定义大多数以_开头,_结尾.
打印源文件名的句子是_FILE_
打印行号的句子是_LINE_
编译日期是_DATA_
当前的编译时间_TIME
c++中特有的_cplusplus
54.写出运行结果: :
{// test1
char str[] = "world"; cout << sizeof(str) << ": ";
char *p = str; cout << sizeof(p) << ": ";
char i = 10; cout << sizeof(i) << ": ";
void *pp = malloc(10); cout << sizeof(p) << endl;
}
第一个显示的是字符串的长度,为6;
第二个显示的指针的长度,为4,
第三个是字符的长度,为1
第四个是指针的长度为4
55.代码:cout << (i+++b) <<endl;int i = 5, b = 7;cout << (i+++b) <<endl;
不用调试,请说出,以上代码在 gcc编译过后的执行结果!
首先,+++是由+和++两个符号组成的,
其中++是单目运算符,优先级顺序排在第二位,结合顺序是从右向左.
其中+是双目运算符,优先级顺序排在第第四位,结合顺序是从左到右.
所以先计算i++,然后计算i+b ,答案为12.
56.c++中什么是左值什么是右值
这是c语言中继承而来的定义,简单的理解,左值就是可以放在赋值语句左边的也可以在右边,右值是只可以在赋值语句的右边
然而并不是所有的左值一直都可以放在左边的,例如常变量,一次初始化之后,就不可以放在左边.
也可以分类使用是否可以取地址来区分左右值,如果可以使用&的说明是左值,如果不可以使用&的说明是右值.
57. 写出一个可以作为左值的函数?
如果返回值具有引用的情况就可以作为左值
int & max(int &x,int &) ; 就可以作为左值.
58.下面的函数实现在一个固定的数上加上一个数,有什么错误,改正 :
int add_n(int n)
{
static int i=100;
i+=n;
return i;
}
其中:static是静态变量,生命周期程序的结束,所以i的值并不是一直都是100,可能和之前的状态有关系.
59.以下三条输出语句分别输出什么?
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << ( str1==str2 ) << endl; //
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?
cout << boolalpha << ( str3==str4 ) << endl; // 输出什么?
cout << boolalpha << ( str5==str6 ) << endl; // 输出什么?
首先需要知道c++中对于字符串等于的含义?比较首地址的位置.
第一条,不同的数组的首地址的位置是不一样的.
第二条,常变量也是数组,地址也是不一样的.
第三条.两个指针都指向的是常数,所以地址是一样的.
60.以下代码有什么问题?
cout << (true?1:"1") << endl;
?:三目运算符需要格式一致,所以会有错误,如果不一致会被强制转换成第一种的类型.