C++面试深度解析:const与static的多维度应用

5星 · 超过95%的资源 需积分: 9 18 下载量 2 浏览量 更新于2024-07-31 1 收藏 103KB DOC 举报
"这篇资源主要涉及的是华为、博彦、中兴、巨龙等公司在C++面试中可能会遇到的问题,重点讨论了`const`和`static`两个关键字的使用以及如何设计类`String`的基本成员函数,包括构造函数、析构函数和赋值运算符重载。" `const`关键字在C++中的主要用途: 1. 声明常量变量:一旦定义为`const`,变量的值就不能被修改,通常在定义时需要初始化。 2. const指针:可以指定指针指向的数据为常量,即指针变量不可变,但所指内容不可变;或者指针本身为常量,意味着指针的地址不可变,但所指数据可变。 3. 函数参数:作为输入参数时,表明该参数在函数内部不应被修改。 4. 成员函数:当声明为`const`成员函数时,表示该函数不会修改类的成员变量,这样可以在常量对象上调用。 5. 返回值为const:防止返回值被误认为是可修改的左值。 `static`关键字的多种作用: 1. 局部静态变量:在函数内部定义的`static`变量,只被分配一次内存,其值在函数多次调用中保持。 2. 全局静态变量:仅限于同一模块内的函数访问,提供了一种限制全局作用域的方法。 3. 静态成员函数:属于类而不是类的对象,不接收`this`指针,不能访问非静态成员,但可以访问其他静态成员。 4. 类的静态成员变量:所有类的对象共享一份存储,不随对象创建而分配,也不随对象销毁而释放。 关于类`String`的构造函数、析构函数和赋值运算符重载的编写: 1. 普通构造函数:接收一个`const char*`参数,用于初始化`String`对象。如果传入的`str`为`NULL`,则应分配一个空字符串的空间。 2. 拷贝构造函数:接收一个`String`类型的引用,用于创建与参数对象相同的新对象,应实现深拷贝以确保数据的安全性。 3. 析构函数:负责释放`m_data`指向的内存,防止内存泄漏。 4. 赋值运算符重载:`String& operator=(const String& other)`,实现对象间的赋值操作,应遵循赋值运算符的规则,如自赋值安全性、右值引用优化等。 完整的`String`类实现可能如下: ```cpp class String { public: String(const char* str = NULL) { // 普通构造函数 if (str == NULL) { m_data = new char[1]{ '\0' }; } else { int len = strlen(str); m_data = new char[len + 1]; strcpy(m_data, str); } } String(const String& other) { // 拷贝构造函数 int len = strlen(other.m_data); m_data = new char[len + 1]; strcpy(m_data, other.m_data); } ~String() { // 析构函数 delete[] m_data; } String& operator=(const String& other) { // 赋值函数 if (this != &other) { // 防止自赋值 delete[] m_data; int len = strlen(other.m_data); m_data = new char[len + 1]; strcpy(m_data, other.m_data); } return *this; } private: char* m_data; // 用于保存字符串 }; ``` 这个`String`类实现了一个简单的字符串类,包含了基本的构造、拷贝、析构和赋值操作,为面试者展示了对C++对象生命周期管理的理解。在实际编程中,还需要考虑异常安全性和性能优化等问题。
2024-11-29 上传
2024-11-29 上传