C++面试深度解析:const与static的多维度应用
5星 · 超过95%的资源 需积分: 9 119 浏览量
更新于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++对象生命周期管理的理解。在实际编程中,还需要考虑异常安全性和性能优化等问题。
1055 浏览量
303 浏览量
225 浏览量
666 浏览量
2025-01-06 上传
2025-01-06 上传
2025-01-06 上传
zhaaaangxie
- 粉丝: 1
- 资源: 3
最新资源
- 测试一下
- 倒霉熊图标下载
- SETFSB.zip
- marathon_3:免费的智力马拉松HTML-学院
- BlenderGEResourceKit:Blender游戏引擎的即用型组件集合
- winsdksetup.zip
- Aikatsu LGTM-crx插件
- dsm-htpc-群集
- simple-password-manager:Flutter制作的简单密码管理应用
- 精美蝴蝶图标下载
- 电信设备-带身份核验的物联网移动终端及人证合一核验方法.zip
- 初级java笔试题-cs-study:https://github.com/jwasham/coding-interview-universi
- MinGW压缩包省去繁琐的官网下载
- SYIPAGeneratedScript:make a ipa by script——使用脚本生成ipa包
- VTS Testing Version 2-crx插件
- 帮手