第24课经典问题(中)-----关于const对象的疑问
关于const对象的疑问
const关键字能否修饰类的对象?
如果可以,有什么特性?
const关键字能够修饰对象
const修饰的对象为只读对象
只读对象的成员变量不允许被改变。(对象是只读的,成员变量不允许被改变 )
只读对象是编译阶段的概念,运行时无效。
C++中的const成员函数
-const对象只能调用const的成员函数
-const成员函数中只能调用const成员函数
-const成员函数中不能直接改写成员变量的值
const成员函数的定义:
Type ClassName::function(Type p) const
类中的函数声明与实际函数定义中都必须带const关键字
类的const函数初探
#include <stdio.h>
class Test
{
int mi;
public:
int mj;
Test(int i);
Test(const Test& t);
int getMi();
};
Test::Test(int i)
{
mi = i;
}
Test::Test(const Test& t)
{
}
int Test::getMi()
{
return mi;
}
int main()
{
Test t(1);
return 0;
}
基于该程序,做以下实验:
1)在main 函数中定义:
const Test t(1);
t.mj = 1000;
这个程序是无法编译通过的,因为t是const对象,它里面的成员变量是无法被改变的。
2)t.getMi(),用t对象调用getMi函数时,会出错。
因为t是const对象,它只能调用const的成员函数,不能调用非const成员函数。
应该将getMi改为const成员函数:
int getMi() const;
int Test::getMi() const
{
return mi;
}
3)在const成员函数内,试图改变mi的值,能编译过吗?
int Test::getMi() const
{
mi = 1000; //错,在const成员函数内,是不允许修改成员变量的值。
return mi;
}
4)此时将getMi()的const属性去掉,进行下面的操作:
Test::Test(const Test& t)
{
mi = t.getMi();
}
这样修改后能编译过吗?
编译会失败,明确告诉我们 mi = t.getMi()这个地方失败。为什么会编译失败呢?
此处的t是Test对象的引用,注意前面加上了const关键字,这意味着给t这个对象加上了只读属性。使得t这个引用所代表的对象变成了只读对象。既然是只读对象,就只能调用const成员函数。
5)下面这样的赋值可以过吗?
Test::Test(const Test& t)
{
mi = t.mi;
}
可以编过。问题:t是一个对象,mi是类的私有成员变量。前面不是说过,不能通过一个对象直接调用类的私有成员变量嘛,在这个地方为什么可以?
下篇博客将继续探讨这个问题。
原文地址:https://www.cnblogs.com/-glb/p/11873388.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法