C++面试深度解析:const与static的多维度应用
5星 · 超过95%的资源 需积分: 9 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++对象生命周期管理的理解。在实际编程中,还需要考虑异常安全性和性能优化等问题。
337 浏览量
2010-11-03 上传
2014-05-08 上传
375 浏览量
2024-11-29 上传
2024-11-29 上传
2024-11-29 上传
2024-11-29 上传
2024-11-29 上传
zhaaaangxie
- 粉丝: 1
- 资源: 3
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍