C++常数据成员与常成员函数详解

需积分: 9 1 下载量 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++中的常数据成员,并避免常见的编程错误。