C++|对象与const

简介: C++|对象与const

常对象

用const修饰的对象称为常对象,为什么要用常对象这样的数据呢?——保证数据的安全性,为了确保数据在共享的时候不被随意更改。const在修饰函数时,声明和定义时都要包含,调用时可以不加从const。

常对象就是用const修饰的对象,常对象中的数据成员为常变量且必须要有初值。

常对象的声明

const 类名 对象[(实参表)];或者 类名 conts 对象[(实参表)];

这两种形式说明,常对象声明时const只要在对象名前就行,举个日期的例子。

例子:const Date date(2024,4,28);          Date const date(2024,4,28);   。

性质

数据成员不能被修改

在所有情况下,date里面的所有数据成员的值不能被修改。

常对象不能调用非const成员函数

常对象不能调用该对象的非const型的成员函数,除了系统自动生成的构造函数与析构函数。编译系统只要发现常对象调用了成员函数,就会检查,该函数是不是const,不是就会报错。

const型成员函数

如何将成员函数声明成const型成员函数——只要在函数声明后面加上const就行;

例如:void PrintDate() const;

const型成员函数,又被称为只读成员函数。

const型成员函数只能访问类对象的任何数据成员的值,不能修改

常对象成员

分解一下这个词,对象成员包括数据成员和成员函数,常对象成员,也就是用const声明的数据成员和用const声明的成员函数分别为 常数据成员,常成员函数。

常数据成员

常数据成员的声明和作用与常变量类似,

常变量

1.用const声明

2.在程序运行过程中不能被修改

3.声明的同时必须初始化

常数据成员

1.用const声明

2.在程序运行过程中不能被修改

3.在声明时必须初始化——构造函数必须使用初始化列表

常成员函数

常成员函数就是const型成员函数,前面说过,const型成员函数的声明就是在成员函数声明后面加上const,常成员函数只能访问对象的数据成员,不能修改数据成员的值。

注意

常对象中的数据成员都是常数据成员,成员函数只有加const的才是常数据成员;

没有声明const成员函数,即使函数内部没有修改数据成员,也不能被常对象调用;

常成员函数不能调用非const成员函数。

总结

const型数据成员

无论是对象的const型数据成员还是常对象的const型数据成员都是不能被修改的

const型成员函数

无论是对象的const型成员函数还是常对象的const型成员函数都是只能访问数据成员的值不能修改;

const型成员函数只能调用const型成员函数,不能调用非const型成员函数。

常对象

常对象只能调用const型的成员函数;

常对象中的数据成员都是const型数据成员。

指针与const

指向对象的常指针

指向对象的常指针——将指向对象的指针加上const修饰,这样这个指针指向的对象就不能在修改,只能指向该对象。

类名 *const 指针名=&对象;

Date *const pdate=&date;

这样pdate就只能指向date这个对象;

应用场景

可以给函数的形参指针加上const,这样函数体代码里面就不允许出现修改指针指向的代码;

指向常对象的指针

这是当一个对象已经被声明成为常对象,想要让一个指向该常对象,那么就只能用指向常对象的指针,来指向这个常对象;

定义指向常对象的指针:const 类名 *指针名;

const Date date(2024,4,27);//常对象定义

const Date *pdate=&date;//指向常对象的指针

指向常对象的指针指向非常对象

如果定义了一个指向常对象的指针,并让其指向非常对象则会导致:

这个非常对象的值不能通该指针来修改;

并且无法通过该指针调用非const成员函数。

可以改变指向

指向常对象的指针的指向对象不能改变,但是,该指针的指向可以改变;

函数形参

指向常对象的指针最常用于函数的形参,可以在函数体代码执行中保证该指针指向对象的内容不被修改。实参可以是常对象,也可以是非常对象。

总结

指向对象的常指针:指针被const修饰,导致该指针只能指向一个对象,对象里面的值可以随意修改。

指向常对象的指针:对象被const修饰,导致该对象里面的值不能被修改,而指针的指向可以修改。

对象的常引用

对象的引用就是对象的别名,这个别名和对象名都是代表同一块内存空间,别名在声明时,要先初始化(也就是谁的别名),一旦初始化,后面就不能更改(不能成为别人的别名)

对象加上const多了一个 区别——通过常引用只能调用const型成员函数

常引用与指向常对象的指针用法相似。


相关文章
|
9月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
11月前
|
存储 安全 编译器
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
|
9月前
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)
|
8月前
|
编译器 C++
类和对象(中 )C++
本文详细讲解了C++中的默认成员函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载和取地址运算符重载等内容。重点分析了各函数的特点、使用场景及相互关系,如构造函数的主要任务是初始化对象,而非创建空间;析构函数用于清理资源;拷贝构造与赋值运算符的区别在于前者用于创建新对象,后者用于已存在的对象赋值。同时,文章还探讨了运算符重载的规则及其应用场景,并通过实例加深理解。最后强调,若类中存在资源管理,需显式定义拷贝构造和赋值运算符以避免浅拷贝问题。
|
8月前
|
存储 编译器 C++
类和对象(上)(C++)
本篇内容主要讲解了C++中类的相关知识,包括类的定义、实例化及this指针的作用。详细说明了类的定义格式、成员函数默认为inline、访问限定符(public、protected、private)的使用规则,以及class与struct的区别。同时分析了类实例化的概念,对象大小的计算规则和内存对齐原则。最后介绍了this指针的工作机制,解释了成员函数如何通过隐含的this指针区分不同对象的数据。这些知识点帮助我们更好地理解C++中类的封装性和对象的实现原理。
|
8月前
|
编译器 C++
类和对象(下)C++
本内容主要讲解C++中的初始化列表、类型转换、静态成员、友元、内部类、匿名对象及对象拷贝时的编译器优化。初始化列表用于成员变量定义初始化,尤其对引用、const及无默认构造函数的类类型变量至关重要。类型转换中,`explicit`可禁用隐式转换。静态成员属类而非对象,受访问限定符约束。内部类是独立类,可增强封装性。匿名对象生命周期短,常用于临时场景。编译器会优化对象拷贝以提高效率。最后,鼓励大家通过重复练习提升技能!
|
10月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
217 19
|
10月前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
370 13
|
9月前
|
安全 编译器 C语言
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
|
9月前
|
存储 程序员 C语言
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。

热门文章

最新文章