C++中的常对象与常对象成员详解
在C++中存在常对象和常对象成员,它们都有一个共同点:都不允许在对象的生命周期内被修改。下面我们详细讲解常对象和常对象成员的定义、声明、初始化及其特点。
常对象
定义
常对象是指一个对象在它被创建后就无法被修改。在C++中,我们可以通过在对象类型前面加上const
关键字来定义常对象。例如:
const int a = 10; // 定义常整型a,并初始化为10
声明
当我们定义了一个常对象后,我们需要在使用之前进行声明。在声明常对象时,我们需要同时使用const
关键字。例如:
extern const int a; // 声明常整型a
初始化
常对象必须在创建时进行初始化,初始化后该对象就不能被修改。可以在定义常对象时进行初始化,也可以在构造函数中进行初始化。例如:
class Student {
public:
const string name; // 常对象成员
const int age; // 常对象成员
Student(string n, int a): name(n), age(a) {}
};
Student s("Tom", 18); // 初始化常对象
特点
- 常对象只能在定义时或构造函数中被初始化,不能在其他地方赋值。
- 常对象不能被修改。任何试图修改常对象的操作都会导致编译错误。
常对象成员
定义
常对象成员是指类中被定义为常成员的成员变量。和常对象一样,常对象成员在创建后就无法被修改。在C++中,我们可以通过在类成员变量类型前面加上const
关键字来定义常对象成员。例如:
class Student {
public:
const string name; // 常对象成员
const int age; // 常对象成员
Student(string n, int a): name(n), age(a) {}
};
初始化
常对象成员必须在构造函数中进行初始化,因为它们不能在其他地方进行赋值。在构造函数中,我们可以通过初始化列表来初始化常对象成员。例如:
Student(string n, int a): name(n), age(a) {}
特点
- 常对象成员只能在构造函数中被初始化,不能在其他地方赋值。
- 常对象成员在对象被创建后就不能被修改。任何试图修改常对象成员的操作都会导致编译错误。
示例如下:
#include <iostream>
#include <string>
using namespace std;
class Student {
public:
const string name; // 常对象成员
const int age; // 常对象成员
Student(string n, int a): name(n), age(a) {} // 初始化常对象成员
void print() const { // 非常成员函数
cout << "name: " << name << ", age: " << age << endl;
}
};
int main() {
const Student s("Tom", 18); // 定义常对象
// s.name = "Jerry"; // 编译错误,不能修改常对象成员
s.print(); // 输出:"name: Tom, age: 18"
return 0;
}
上述代码中,定义了一个常对象s
,它的常对象成员name
和age
都在构造函数中进行初始化。s.name = "Jerry";
会导致编译错误,因为常对象的成员不能被修改。通过print()
函数输出name
和age
,可以看到常对象成员确实在对象被创建后无法修改。
另外一个示例:
#include <iostream>
#include <string>
using namespace std;
int main() {
const int a = 10; // 定义常整型变量a
// a = 20; // 编译错误,不能修改常整型变量
cout << "a = " << a << endl;
return 0;
}
上述代码中,定义了一个常整型变量a
,其值为10
。尝试对a
进行修改a = 20;
会导致编译错误,因为常变量不能被修改。通过cout
语句输出,可以看到a
确实被初始化为10
,而并没有被修改。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的常对象与常对象成员详解 - Python技术站