IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++共享数据的保护-const -> 正文阅读

[C++知识库]C++共享数据的保护-const

?对于需要共享又要防止被修改的数据因该声明为常量;

1. 常对象

?常对象的数据成员的值在整个生存期间都不会被改变,所以常对象必须初试化,然后不能被更新

class A
{
public:
	……
	A(int a,int b):x(a),y(b){}
	……
private:
	int x,y;
};
const A a(3,4);

【属性】常对象不能被赋值的两种保护:
(1)一般用对象.数据成员=值的方式,但是限制其不能这样赋值。
(2)类中用成员函数访问去更改值,而语法规定:不能通过常对象调用普通成员函数
而常对象唯一的对外接口是:
(3)调用常成员函数


2. 常成员函数

类型说明符 函数名(参数表) const { }

(1)因为不管是否是常常对象调用常成员函数,都会将该对象视作常对象,那么此时的常成员函数是不能修改对象的数据成员的值。
(2)const可以被视为重载的区分:(一般如果对象为非常对象调用这两个重载函数,优先调用非常成员函数)

void print();
void print() const;

扩展理解
?非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于mutable修饰的成员。
总结:

  1. 非const对象/const对象------>const成员函数
  2. const的对象(只能)---->const成员函数
  3. 非const成员函数(只被)<------非const对象

? 一般对于不需修改操作的成员函数尽量声明为const成员函数,以防止产生const对象无法调用该成员函数的问题


3.常数据成员

类中声明常数据成员后就不能在类成员函数或者外面对象访问赋值。只能通过初始化列表初始化。

class A{
public:
	A(int i);
private:
	const int a;
	static const int b; //静态常数据成员
}
A::A(int i) : a (i){}
const int A::b = 10;

【注意】类的静态变量和常量都是在类内声明,类外赋值的。但静态常量如果是整形和枚举类型可以直接在类内指定其值,此时编译器会将所有的A::b替换为10(但如果出现如给b取地址,需要分配空间,得专门定义A::b)


4. 常引用

常引用引用的对象不能被更新。如果常引用作参数,不会对原实参进行修改;

非常引用(绑定)—> 普通对象
常引用(绑定)—>常对象/普通对象----->(当作)常对象

?函数中无需改变其值的参数,不宜用普通引用方式传递,会使得常对象无法传入,可以传值或者常引用,传值会产生大量拷贝,传常引用更佳:复制构造函数一般用常引用传递
例如:

void func(char *a){........}
int main(){
	char *a="hello world!";
	func(a);
	return 0;
}
//调用func时,无法将常字符串转为char*,所以func()改为
void func(const char *a){........}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:14:26  更:2022-03-12 17:15:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:54:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码