最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

华为中兴cc++笔试

IT圈 admin 32浏览 0评论

2024年6月3日发(作者:路天宇)

1. 以下三条输出语句分别输出什么?

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; // 输出什么?

答:分别输出false,false,true。str1和str2都是字符数组,每个都有其自己的存储区,它们的

值则是各存储区首地址,不等;str3和str4同上,只是按const语义,它们所指向的数据区

不能修改。str5和str6并非数组而是字符指针,并不分配存储区,其后的“abc”以常量形

式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。

3. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?

答:

a. class B : public A { „„} // B公有继承自A,可以是间接继承的

b. class B { operator A( ); } // B实现了隐式转化为A的转化

c. class A { A( const B& ); } // A实现了non-explicit的参数为B(可以有其他带默认值的参数)

构造函数

d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一

4. 以下代码有什么问题?

struct Test

{

Test( int ) {}

Test() {}

void fun() {}

};

void main( void )

{

Test a(1);

();

Test b();

();

}

答:变量b定义出错。按默认构造函数定义对象,不需要加括号。

5. 以下代码有什么问题?

cout << (true?1:"1") << endl;

答:三元表达式“?:”问号后面的两个操作数必须为同一类型。

6. 以下代码能够编译通过吗,为什么?

unsigned int const size1 = 2;

char str1[ size1 ];

unsigned int temp = 0;

cin >> temp;

unsigned int const size2 = temp;

char str2[ size2 ];

答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。

During my test in linux environment. The above code could be compiled successfully. But if we

initialize the defined arrary like this “char str2[ size2 ] = {0};”, there would be a compile error

informing that “variable-sized object `str2' may not be initialized”.

7. 以下反向遍历array数组的方法有什么错误?

vector array;

_back( 1 );

_back( 2 );

_back( 3 );

for( vector::size_type i=()-1; i>=0; --i ) // 反向遍历array数组

{

cout << array[i] << endl;

}

答:首先数组定义有误,应加上类型参数:vector array。其次vector::size_type被定义

为unsigned int,即无符号数,这样做为循环变量的i为0时再减1就会变成最大的整数,导

致循环失去控制。

8. 以下代码中的输出语句输出0吗,为什么?

struct CLS

{

int m_i;

CLS( int i ) : m_i(i) {}

CLS()

{

CLS(0);

}

};

CLS obj;

cout << obj.m_i << endl;

2024年6月3日发(作者:路天宇)

1. 以下三条输出语句分别输出什么?

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; // 输出什么?

答:分别输出false,false,true。str1和str2都是字符数组,每个都有其自己的存储区,它们的

值则是各存储区首地址,不等;str3和str4同上,只是按const语义,它们所指向的数据区

不能修改。str5和str6并非数组而是字符指针,并不分配存储区,其后的“abc”以常量形

式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。

3. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?

答:

a. class B : public A { „„} // B公有继承自A,可以是间接继承的

b. class B { operator A( ); } // B实现了隐式转化为A的转化

c. class A { A( const B& ); } // A实现了non-explicit的参数为B(可以有其他带默认值的参数)

构造函数

d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一

4. 以下代码有什么问题?

struct Test

{

Test( int ) {}

Test() {}

void fun() {}

};

void main( void )

{

Test a(1);

();

Test b();

();

}

答:变量b定义出错。按默认构造函数定义对象,不需要加括号。

5. 以下代码有什么问题?

cout << (true?1:"1") << endl;

答:三元表达式“?:”问号后面的两个操作数必须为同一类型。

6. 以下代码能够编译通过吗,为什么?

unsigned int const size1 = 2;

char str1[ size1 ];

unsigned int temp = 0;

cin >> temp;

unsigned int const size2 = temp;

char str2[ size2 ];

答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。

During my test in linux environment. The above code could be compiled successfully. But if we

initialize the defined arrary like this “char str2[ size2 ] = {0};”, there would be a compile error

informing that “variable-sized object `str2' may not be initialized”.

7. 以下反向遍历array数组的方法有什么错误?

vector array;

_back( 1 );

_back( 2 );

_back( 3 );

for( vector::size_type i=()-1; i>=0; --i ) // 反向遍历array数组

{

cout << array[i] << endl;

}

答:首先数组定义有误,应加上类型参数:vector array。其次vector::size_type被定义

为unsigned int,即无符号数,这样做为循环变量的i为0时再减1就会变成最大的整数,导

致循环失去控制。

8. 以下代码中的输出语句输出0吗,为什么?

struct CLS

{

int m_i;

CLS( int i ) : m_i(i) {}

CLS()

{

CLS(0);

}

};

CLS obj;

cout << obj.m_i << endl;

发布评论

评论列表 (0)

  1. 暂无评论