53day---C++面试题

1.请问在64位平台机器下sizeof(string_a),sizeof(string_b)大小分别是 100 8

char *string_a=(char *)malloc(100*sizeof(char));
char string_b[100];

解:
string_a是一个char型的指针,在64位系统中sizeof(char*)=8
string_b是一个char型的数组,在64位系统中sizeof(char)=1,共100值因此为100
2.使用printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度 %-30.4f
解:
-: 左对齐
30: 最小字段宽度
.4: 精确度保留小数4位
f: double精度浮点数
e: 科学计数法
3.字符串“a+b=20\n”的长度是 7
解:求长度,用strlen; 求内存空间大小,用sizeof
4.char是有符号还是无符号类型 取决于具体实现
5.运行时的输出结果是122444

#include<iostream>
using namespace std;
class MyClass
{
public:
    MyClass(int i = 0)
    {
        cout << i;
    }
    MyClass(const MyClass &x)
    {
        cout << 2;
    }
    MyClass &operator=(const MyClass &x)
    {
        cout << 3;
        return *this;
    }
    ~MyClass()
    {
        cout << 4;
    }
};
int main()
{
    MyClass obj1(1), obj2(2);
    MyClass obj3 = obj1;
    return 0;
}

解:
关键是区分 浅/深拷贝操作 和 赋值操作:
没有重载=之前:
A a ;
A b;
a = b;
这里是赋值操作。
A a;
A b = a;
这里是浅拷贝操作。

重载 = 之后:
A a ;
A b;
a = b;
这里是深拷贝操作(当然这道题直接返回了,通常我们重载赋值运算符进行深拷贝操作)。
A a;
A b = a;
这里还是浅拷贝操作。
6.定义宏#define DECLARE(name, type) type name##_##type##_type,
则DECLARE(val, int)替换结果为 int val_int_type

解:##是一种分隔连接方式,它的作用是先分隔,然后进行强制连接
“name”和第一个“”之间被分隔了,所以预处理器会把name####type##type解释成4段:“name”、“”、“type”以及“_type”,name和type会被替换,而_type不会被替换
7.下列哪种情况会调用拷贝构造函数ACD
A 用派生类的对象去初始化基类对象时
B 将类的一个对象赋值给该类的另一个对象时
C 函数的形参是类的对象,调用函数进行形参和实参结合时
D 函数的返回值是类的对象,函数执行返回调用时

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值