软通动力C++面试题解析:字符串比较与类型转换

5星 · 超过95%的资源 需积分: 13 159 下载量 132 浏览量 更新于2024-11-26 1 收藏 80KB TXT 举报
"软通动力面试题C++合集,主要涵盖C++基础知识,包括字符串比较、内存管理、类型转换、函数调用以及条件运算符的使用等" 1. 字符串比较 在C++中,字符串是字符数组。题目中的`str1`和`str2`是相同字符数组的两个副本,它们的地址不同,因此`str1 == str2`返回`false`。`str3`和`str4`都是常量字符数组,它们在内存中存储的位置相同,所以`str3 == str4`返回`true`。`str5`和`str6`是常量字符指针,它们都指向字符串字面值"abc"在内存中的同一个位置,因此`str5 == str6`返回`true`。 2. `sizeof`运算符 `sizeof`用于计算对象或类型的大小。在`UpperCase`函数中,`sizeof(str)`返回整个字符数组的大小,包括结束符`\0`,因此其值为6。`sizeof(str[0])`返回单个字符的大小,即1。`sizeof(str)/sizeof(str[0])`的结果是6,表示数组包含6个字符。函数调用后,`str`变为大写,但不会改变其长度。 3. 类型转换 a) B类可以隐式转换为A类(继承关系)。 b) 定义一个成员函数`operator A()`使得B类实例可以被当作A类来使用。 c) A类有一个非显式的构造函数,接收一个B类引用,这允许B类实例直接初始化A类。 d) 定义赋值操作符`operator=`,允许A类实例之间进行赋值,也可以接受一个A类引用。 4. 构造函数与对象调用 在C++中,`Test a(1)`调用带有参数的构造函数创建对象`a`,然后可以调用`a.fun()`。而`Test b();`是一个函数声明,而不是对象创建。为了调用`b.fun()`,应改为`Test b = Test();`以确保对象`b`被正确构造并可以调用成员函数。 5. 条件运算符 条件运算符`?(expr1):expr2`在C++中被称为三目运算符。如果`expr1`为真(非零),则返回`expr1`的值,否则返回`expr2`的值。在`cout << (true ? 1 : "1") << endl;`中,因为`true`为真,所以输出`1`。 6. 编译时错误 `unsigned int const size1=2;`定义了一个常量整数`size1`。接着尝试将`size1`作为数组长度,分配内存给`str1`,但在C++中,数组的长度必须是编译时常量。由于`size1`是在运行时赋值的,因此此行代码会导致编译错误。 以上就是对软通动力C++面试题目的解析,涵盖了字符串比较、内存管理、类型转换、构造函数、条件运算符等多个关键知识点。理解这些概念对于C++程序员来说至关重要。