如何定义一个类的特殊成员?

摘要:const 成员 const 是C语言延续的关键字,核心语义为只读不可修改,在类中用于限定成员(数据方法)的只读属性,帮助编译器优化,提升代码安全性与效率。 const 类数据(成员属性) 核心用途 修饰一旦初始化就不可修改的类属性(如身
const 成员 const 是C语言延续的关键字,核心语义为只读不可修改,在类中用于限定成员(数据/方法)的只读属性,帮助编译器优化,提升代码安全性与效率。 const 类数据(成员属性) 核心用途 修饰一旦初始化就不可修改的类属性(如身份证号、学号、固定名称等)。 初始化方式(两种) 初始化方式 语法示例 特点与适用场景 构造函数初始化列表 cpp class Person { const unsigned int ID; public: Person(unsigned int id) : ID(id) {} // 初始化列表赋值 }; 1. 支持对象创建时传入不同初始值(如不同学生的学号) 2. 兼容性强,支持所有C++标准 类内直接初始化 cpp class Person { const unsigned int ID = 1234; // 类内定死值 }; 1. 所有对象共享同一固定值,不可修改 2. 仅支持C++11及以上标准,老旧编译器可能报错 3. 适用场景:类的公共固定属性(如学校名称) 典型示例 class Student { private: // 所有学生共享的固定属性(类内初始化) const string schoolName = "XXX学院"; // 每个学生独有的只读属性(初始化列表赋值) const int ID; public: // 构造函数初始化列表为ID赋值 Student(int id) : ID(id) {} }; int main() { Student Jack(001); // ID=001,schoolName=XXX学院 Student Lucy(002); // ID=002,schoolName=XXX学院 } 注意事项 const 类数据不可在构造函数体内部赋值(仅能通过初始化列表或类内初始化); 类内初始化的 const 成员,本质是编译期常量(若值为字面量),内存占用更高效。 const 类方法 核心用途 声明该方法不会修改类的任何数据成员,也不会调用非 const 方法,是“只读操作”的明确标识。 语法规则 const 关键字必须放在函数参数列表之后; 声明与定义中必须同时包含 const(const 是方法重载的依据之一)。 示例代码 // 头文件 Person.h #ifndef _PERSON_H #define _PERSON_H #include <string> using namespace std; class Person { int age; string name; public: // 声明时加const void showInfo() const; void setName(string newName); // 非const方法 }; #endif // 实现文件 Person.cpp #include "Person.h" // 定义时必须加const,与声明一致 void Person::showInfo() const { // 错误:const方法不能修改成员数据 // age = 100; // 错误:const方法不能调用非const方法 // setName("刘德华"); cout << "姓名:" << name << ",年龄:" << age << endl; } 注意事项 const 对象只能调用 const 类方法(非 const 对象可调用所有方法); 逻辑上不修改成员数据的方法,务必声明为 const(提升编译优化效率,减少误操作)。 拓展:const 与 static 的组合 static const 类数据(C++11前常用) class Student { // 类内声明(必须类外定义) static const int MAX_SCORE = 100; }; // 类外定义(C++11前必须,C++11后可省略,但建议保留兼容性) const int Student::MAX_SCORE; 特性:所有对象共享、只读、编译期常量(值需为字面量); 适用场景:类的公共常量(如满分、最大容量)。
阅读全文