C++常数据成员与常成员函数详解
需积分: 9 166 浏览量
更新于2024-09-21
收藏 29KB DOC 举报
C++中的常数据成员精讲主要涉及以下几个核心知识点:
1. **const修饰的对象与函数**:
- 使用`const`关键字修饰的定义对象称为常对象,意味着这些对象的值在创建后不能被修改。
- `const`修饰的成员函数称为常成员函数,这类函数内部不能修改对象的状态,包括常数据成员。
- 常数据成员是用`const`修饰的数据成员,它们的值在对象生命周期内是固定的,必须在声明时或构造函数中初始化。
2. **常数据成员的声明和限制**:
- 声明常数据成员时,数据类型不能省略,可以指定访问控制符如`public`或`private`,但常数据成员本身的`const`不能省略,正确的声明形式是`const 数据类型 数据名`或`数据类型 const 数据名`。
- 只有静态常量(`static const`)可以在类体内直接初始化,如`const int cctwl = 5;`,但普通常数据成员必须在构造函数中初始化。
3. **常数据成员的使用规则**:
- 常数据成员不能被任何函数(包括构造函数)赋值,即使它们是类的成员函数,也不能改变其值。
- 在构造函数中初始化常数据成员时,必须通过初始化列表,如`A(constint x, int y): cctwl(x), cct(y)`。
- 类如果有多个默认构造函数,所有常数据成员都必须在构造函数中至少有一次初始化。
4. **示例代码中的错误**:
- 示例A的错误:
- 错误一:`const int cctwl = 5;` 不正确,应在构造函数中通过初始化列表初始化。
- 错误二:没有提供合适的默认构造函数,因为常数据成员`cctwl`未在构造函数中初始化,需要提供一个默认构造函数来处理常数据成员。
- 示例B的错误:
- 错误一:在非默认构造函数中直接修改`cct`的值是不允许的,因为它是常数据成员。
正确的做法是将常数据成员初始化放在构造函数中,并确保每个构造函数至少为常数据成员提供一次初始化。例如:
```cpp
class A {
private:
int w, h;
const int cctwl;
const int cctwlcom;
public:
A() : cctwl(5), cctwlcom(8) {} // 通过构造函数初始化列表
A(int x, int y) : w(x), h(y), cctwl(5), cct(6) {} // 初始化列表覆盖默认行为
// 添加必要的访问控制和可能的其他成员函数
};
```
通过理解这些关键点,你可以更好地运用C++中的常数据成员,并避免常见的编程错误。
2013-11-25 上传
2018-09-28 上传
2023-05-16 上传
2023-05-22 上传
2023-05-30 上传
2023-03-29 上传
2024-06-20 上传
2023-06-11 上传
2023-05-23 上传
Dragonet7
- 粉丝: 0
- 资源: 1
最新资源
- ExtJS 2.0 入门教程与开发指南
- 基于TMS320F2812的能量回馈调速系统设计
- SIP协议详解:RFC3261与即时消息RFC3428
- DM642与CMOS图像传感器接口设计与实现
- Windows Embedded CE6.0安装与开发环境搭建指南
- Eclipse插件开发入门与实践指南
- IEEE 802.16-2004标准详解:固定无线宽带WiMax技术
- AIX平台上的数据库性能优化实战
- ESXi 4.1全面配置教程:从网络到安全与实用工具详解
- VMware ESXi Installable与vCenter Server 4.1 安装步骤详解
- TI MSP430超低功耗单片机选型与应用指南
- DOS环境下的DEBUG调试工具详细指南
- VMware vCenter Converter 4.2 安装与管理实战指南
- HP QTP与QC结合构建业务组件自动化测试框架
- JsEclipse安装配置全攻略
- Daubechies小波构造及MATLAB实现