C++随笔
C++语言
🔰 一、C++语言常见问题
1. C++和C的主要区别是什么?
答:
C++是C的超集,主要区别包括:
- 面向对象编程:C++支持类、继承、多态、封装,而C是过程式编程
- 函数重载:C++支持同名函数的重载,C不支持
- 引用:C++有引用类型,C只有指针
- 命名空间:C++有namespace避免命名冲突,C没有
- 类型检查:C++的类型检查更严格
- 标准库:C++有STL等更丰富的库
- 内存管理:C++有new/delete,C使用malloc/free
- 函数参数:C++支持默认参数,C不支持
// C++特性示例
namespace MySpace {class Student {string name;public:void display() { cout << name << endl; }};
}void func(int a = 10); // 默认参数
void func(double a); // 函数重载
2. 什么是构造函数和析构函数?
解析:
- 构造函数:创建对象时自动调用的特殊成员函数,用于初始化对象。与类同名,无返回值
- 析构函数:对象销毁时自动调用的特殊成员函数,用于清理资源。函数名是~类名,无参数无返回值
特点:
- 构造函数可以重载,析构函数不能重载
- 都不能被继承(但派生类会调用基类的)
- 构造函数可以有参数,析构函数不能有参数
- 编译器会提供默认的构造函数和析构函数
class MyClass {int* data;
public:MyClass() { data = new int[10]; } // 构造函数~MyClass() { delete[] data; } // 析构函数
};
3. 什么是引用?引用和指针的区别?
解析:
引用是已存在变量的别名,主要区别:
特性 | 引用 | 指针 |
---|---|---|
是否可为空 | 不能为NULL,必须初始化 | 可以为NULL |
是否可重新赋值 | 不能重新绑定其他对象 | 可以指向其他对象 |
是否有独立内存 | 没有独立内存地址 | 有独立内存地址 |
语法使用 | 使用.访问成员 | 使用->访问成员 |
算术运算 | 不支持 | 支持指针运算 |
安全性 | 相对安全 | 可能产生野指针 |
int a = 10;
int& ref = a; // 引用必须初始化
int* ptr = &a; // 指针
4. 什么是函数重载?重载的规则是什么?
解析:
函数重载是指在同一作用域内,可以有多个同名函数,但参数列表必须不同。
重载规则:
- 函数名必须相同
- 参数个数、类型或顺序至少有一个不同
- 仅返回值不同不能构成重载
- const修饰符可以参与重载(成员函数)
- 默认参数可能导致重载二义性
void print(int a);
void print(double a