关于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(); return ;
}

基于该程序,做以下实验:

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是类的私有成员变量。前面不是说过,不能通过一个对象直接调用类的私有成员变量嘛,在这个地方为什么可以?

下篇博客将继续探讨这个问题。

最新文章

  1. docker mysql
  2. java 通过控制台输入的数字打印菱形字母
  3. C#窗体 LISTVIEW
  4. uva 839 not so mobile——yhx
  5. php返回json数据简单实例
  6. OpenCV白平衡算法之灰度世界法(消除RGB受光照影响)
  7. 黄聪:HtmlAgilityPack,C#实用的HTML解析类 ---- HtmlNode类
  8. CF 13E. Holes 分块数组
  9. Android 解决双卡双待手机解析短信异常
  10. AutoItLibrary库入门
  11. Unit Tests Tool - &lt;What is “Mock You”&gt; The introduction to moq #Reprinted#
  12. UVA 11080 - Place the Guards(二分图判定)
  13. 最常用的动态sql语句梳理Mybatis(转)
  14. C#的显式接口和隐式接口(转载)
  15. 201521123001《Java程序设计》第10周学习总结
  16. 洛谷P1854 花店橱窗布置 分析+题解代码
  17. 背景重复样式background-repeat
  18. padding属性很有用
  19. webpack 配置 publicPath的理解
  20. 【python001-IDLE】

热门文章

  1. Centos 7 自动安装系统-pxe
  2. jQuery中的工具(十)
  3. 洛谷 P5595 【XR-4】歌唱比赛
  4. luoguP3346 [ZJOI2015]诸神眷顾的幻想乡
  5. ionic4打包和ngix配置
  6. go 学习笔记之环境搭建
  7. eclipse复制bpmn文件到idea下乱码问题处理
  8. docker 通过中间镜像加速部署
  9. 1+x 证书 Web 前端开发 MySQL 知识点梳理
  10. redis之漏斗限流