# 来源
有些数据是需要共享,但是又不希望别人随意改动,用const来修饰,使其成为常量
# 常对象
## 特点
数据成员受到保护,不可改变
必须有初值
不可调用该常对象中的非const类型的成员函数,避免修改该常对象中的数据成员
## 定义方式
const 类名::对象名(实参列表)
类名 const 对象名(实参列表)
# 常成员函数
## 特点
可以访问数据成员,但是不允许修改
## 定义方式
成员函数 const
# 常数据成员
## 特点
常对象中的数据成员,都是常数据成员,不能被改变,只能在构造函数中赋值
# 规律
| **数据成员** | **非**const成员函数 | **const**成员函数 |
| --- | --- | --- |
| **非const成员** | **可以引用**,**也可以改变值** | **可以引用**,**但不可以改变值** |
| **const数据成员** | **可以引用**,**但不可以改变值** | **可以引用**,**但不可以改变值** |
| **const对象数据成员** | **不允许引用** **和改变值** | **可以引用**,**但不可以改变值** |
## 指针常量
将指针声明为常量,指针值始终不变,指向不变,不可通过该指针,改变值
## 定义方式
类名 \*const 指针变量名=对象地址
## const变量小结
| **形参** | **实参** | **合法否** | **改变指针所指向的变量**(**对象**)**的值** |
| --- | --- | --- | --- |
| **指向非const型变量(对象)的指针** | **非const型变量(对象)的地址** | **合法** | **可以** |
| **指向非const型变量(对象**)**的指针** | **const型变量(对象)的地址** | **非法** | **/** |
| **指向const型变量(对象)的指针** | **const型变量(对象)的地址** | **合法** | **不可以** |
| **指向const型变量(对象)的指针** | **非const型变量(对象)的地址** | **合法** | **不可以** |
| 形式 | 含义 |
| --- | --- |
| **Time const t1;或const Time t1** | **t1是常对象,其值在任何情况下都不能改变** |
| **void Time∷fun( )const** | **fun是Time类中的常成员函数,可以引用,但不能修改本类中的数据成员** |
| **Time \* const p;** | **p是指向Time类对象的常指针,p的值(即p的指向)不能改变** |
| **const Time \*p;** | **p是指向Time类常对象的指针,其指向的类对象的值不能通过指针来改变** |
| **Time &t1=t;** | **t1是Time类对象t的引用,二者指向同一段内存空间** |
~~~
#include <iostream>
using namespace std;
class Time
{
public:
Time(int,int,int);
int hour;
int minute;
int sec;
};
Time∷Time(int h,int m,int s) //定义构造函数
{
hour=h;
minute=m;
sec=s;
}
void fun(Time &t) //形参t是Time类对象的引用
{
t.hour=18;
}
int main( )
{
Time t1(10,13,56); // t1是Time类对象
fun(t1);
//实参是Time类对象,可以通过引用来修改实参t1的值
cout<<t1.hour<<endl; //输出t1.hour的值为18
return 0;
}
~~~
- 介绍
- 编程设计语言
- 第一章 对C++的初步认识
- 1.2 最简单的C++程序
- 1.3 C++对C的补充
- 1.3.1 return
- 1.3.2 输入输出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定义常变量
- 1.3.5 函数原型声明
- 1.3.6 内置函数
- 1.3.7 函数重载
- 1.3.8 函数模板
- 1.3.9 有默认值的参数
- 1.3.10 作用域
- 1.3.11 const修饰指针
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 变量
- 1.3.15 字符串变量
- 第二章 类与对象
- 2.2 类的声明和对象的定义
- 2.3 类的成员函数
- 第三章 关于类和对象的进一步讨论
- 3.1 构造函数
- 3.1.1 对象的初始化
- 3.1.2 构造函数
- 3.2 析构函数
- 3.3调用析构函数和构造函数的顺序
- 3.4 对象数组
- 3.5 对象指针
- 3.6 共享数据的保护
- 3.7 对象的建立与释放
- 3.8 对象的赋值与复制
- 3.9 静态成员
- 3.10 友元
- 3.11 类模板
- 第四章 运算符重载
- 数据类型转换
- 运算符重载
- 重载流插入运算符和流提取运算符
- 第五章 继承与派生
- 继承与派生
- 第六章 多态性与虚函数
- 多态性
- 虚函数
- 纯虚函数与抽象类