陕西省网站建设_网站建设公司_无障碍设计_seo优化
2025/12/19 16:09:55 网站建设 项目流程

static和friend
面向对象: 封装、继承、多态(虚函数表原理必看,面试必问)。

手写一个简单的 String 类的构造函数、析构函数和拷贝构造函数。

include // 为了使用 strlen, strcpy

include

class String {
private:
char* data;

public:
// 1. 普通构造函数
String(const char* str = nullptr) {
if (str == nullptr) {
data = new char[1]; // 分配一个字节存 '\0'
*data = '\0';
} else {
int length = std::strlen(str);
data = new char[length + 1]; // +1 为了存结束符
std::strcpy(data, str);
}
}

// 2. 析构函数
~String() {if (data != nullptr) {delete[] data; // 注意:对应 new char[],必须使用 delete[]data = nullptr;}
}// 3. 拷贝构造函数 (深拷贝的核心)
String(const String& other) {// 分配新内存int length = std::strlen(other.data);data = new char[length + 1];// 复制内容std::strcpy(data, other.data);
}// 加分项:赋值运算符重载 (虽未问到,但通常是一套的)
String& operator=(const String& other) {if (this == &other) return *this; // 自赋值检测delete[] data; // 释放原有内存int length = std::strlen(other.data);data = new char[length + 1];std::strcpy(data, other.data);return *this;
}

};

Q1. 指针和引用有什么区别?(至少说出 3 点)
你的答案:

初始化要求: 引用在定义时必须初始化,且一旦绑定不可改变;指针可以不初始化(虽不推荐),且可以随时改变指向的对象。

空值 (Nullability): 指针可以是 nullptr (空指针);引用通常必须指向一个有效的对象,不存在“空引用”。

本质与内存: 从汇编层面看,引用通常是指针的语法糖(底层也是存地址),但在 C++ 语法层面,指针是一个持有地址的变量(占用内存),而引用只是对象的别名(不额外占用内存,sizeof 引用得到的是被引用对象的大小)。

多级性: 存在多级指针 (如 int**),但不存在多级引用 (没有 int&& 这种指向引用的引用,注:右值引用是另一回事)。

Q2. new/delete 和 malloc/free 的核心区别是什么?
你的答案: 为了清晰对比,我们可以使用下表:
image

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询