专业编程基础技术教程

网站首页 > 基础教程 正文

C++ const 类型常成员变量,有什么特性?linux C++第45讲

ccvgpt 2024-08-08 12:56:20 基础教程 13 ℃

3 常对象成员

可以在声明类时将成员声明为 const,即声明常成员变量和常成员函数。

3.1 常成员变量

常成员变量的用法与一般常变量相似,用关键字 const 来声明常成员变量。常成员变量的值不能改变的。有一点要注意:只能通过构造函数的初始化参数列表对常成员变量进行初始化。如下是一个测试例子:

C++ const 类型常成员变量,有什么特性?linux C++第45讲

在student类中定义了一个const类型的成员变量,如下:

const long long number; //电话号码

那么,该成员变量是const类型,所以,在定义student类对象的时候,必须给const类型的number成员变量进行初始化。而且,只能够在构造函数的初始化参数列表中进行。例如:

student(char* pn, char* pa, long long n):number(n)

所以,在初始化参数列表中,对number成员变量进行赋值。

如果在构造函数体中对number成员变量赋值,如下:

student(char* pn, char* pa, long long n)

{

strcpy(name, pn);

strcpy(addr, pa);

number = n;

}

此时,编译提示异常:

test.cpp: In constructor ‘student::student(char*, char*, long long int)’:

test.cpp:11: error: uninitialized member ‘student::number’ with ‘const’ type ‘const long long int’

test.cpp:15: error: assignment of read-only data-member ‘student::number’

提示number是read-only类型,无法直接赋值初始。需要在构造函数的参数列表中完成,如下:

student(char* pn, char* pa, long long n): number(n)

{

strcpy(name, pn);

strcpy(addr, pa);

}

这样才是正确的操作方式。

在类体中声明了某一个成员变量为常成员变量后,该类的所有对象中的该成员变量的值都是不能改变的,就是说,类对象的常成员变量是不可以被修改。

但是,上面我们提到,成员变量可以定义为multable类型,那么,常对象的multable类型的成员变量可以被修改。注意:如果成员变量是const类型,是常成员变量,是不可以被随意修改,所以,这是两个不同的概念。

所以,我们可以归纳总结如下:

(1) 常对象,可以修改multable类型的成员变量;

(2) const类型修饰的成员变量,是常成员变量,不可以被修改;

所以,const类型定义的成员变量或者对象是常类型,不可以随意修改,增加了数据保护的机制。

Tags:

最近发表
标签列表