面向对象C++(9)数据共享和保护

本文深入探讨了C++中的常对象、常成员函数和常数据成员的概念及使用规则。介绍了如何定义和初始化常数据成员,以及常成员函数的特点和作用。强调了常对象的初始化必要性和调用限制,以及常成员函数对数据成员的保护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常对象
常成员

之前提到的静态成员可以实现多个类之间数据的共享。但是共享数据不同对象均可访问。
常类型就是为了保证共享,又防止数据被修改

常对象

指对象常量:
const 类名 对象名;
或者 类名 对象名;

常对象的特点:
(1)常对象必须进行初始化,而且不能被更新。数据成员同理
(2)常对象只能调用类中那些不能改变数据成员值的成员函数(即常成员函数),而不能调用类中的其他普通成员函数。

常对象成员
常数据成员:
class 类名
{
……//类中的其他成员
const 类型名 数据成员名
……//类中的其他成员
}

需要用构造函数的初始化表进行初始化
类名::类名(形参表):常数据成员名1(值1),
常数据成员名2(值2),
{//构造函数的函数体
}
其他成员函数不能对该成员赋值。

常成员函数
class 类名
{
……类中其他成员
类型 函数名 (形参表)const
……类中其他成员
}
特点:只读函数,也不能调用该类中没有const修饰的其他成员函数
2const关键字也是函数类型的一部分,其实现部分中也带const关键字
3const关键字可以区分重载函数

总结

  1. 常数据成员必须初始化并且不能更新
  2. 对于常成员函数,下面描述正确的是(B)。

A.类的成员函数可以操作常对象
B.类的成员函数不能操作常对象
C. 只有常成员函数可以操作常对象
D.在常成员函数中,常对象可以被更新
3.定义类的常成员关键字是const
4.常成员函数,定义和声明时必须加const关键字,调用时不必加
5.类的成员函数不能对常数据进行复制操作,一般均要构造函数通过舒适化列表进行初始化赋值 6。常对象中的数据成员为常量,且定义对象时必须初始化
1、常对象一定要初始化,永不能修对象的数据成员,常对象只能调用常成员函数(在调用的常成员函数中不能调用普通成员函数)

网上的介绍:

用const修饰的对象叫对象常量,其格式如下:

〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉

2、常成员函数:

 用const关键词说明的函数叫常成员函数。其格式如下:

〈类型〉〈函数名〉(〈参数表〉)const;

常成员函数不能访问普通成员函数和常成员变量,但是普通成员函数能够访问常成员函数

(1) const是函数类型的一个组成部分,因此在函数实现部分也要带有const关键字。

(2) 常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。

(3) 常对象只能调用它的常成员函数,而不能调用其他成员函数。成员函数与对象之间的操作关系如表所示。

成员函数与对象之间的操作关系

常成员函数

一般成员函数

常对象

可以

不可以

一般对象

可以

可以

(4) const关键字可以用于参与重载函数的区分。例如:

void Print(); 

void Print() const; 

这两个函数可以用于重载。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。

常成员变量:只能在构造函数的初始化列表初始化;

如:

const int a;

const int b;

int c;

stu::stu(int a,int b,int c) :a(a),b(b),c©{}

或者:stu::stu(int a,int b,int c):a(a),b(b) {

this->c = c;

}

下面是错误的赋值方法:

stu::stu(int a,int b,int c) {

this->a=a;

this->b = b;

this->c = c;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值