c++:三
C++:三
对于共享数据的保护,我们可以使用常量,在使用数据的同时也防止了数据被修改,即可有效的保护数据。
常对象
常对象必须在定义对象时就使用“const”关键字将指定对象命名为常对象。常对象的数据成员值在对象生存的期间内不能被改变。
常对象中的数据成员为常变量且必须要有初始值,如
Time const t1(12,34,36); //定义t1为常对象
//或者写为 const Time t1(12,34,36);
//两种写法都是正确的。
也就是说常对象必须初始化且不能被更新。
例如:


常成员函数
同样的,使用关键字“const”修饰的函数为常成员函数。
使用为下:
void print() const;//类型说明符 函数名 const;
常成员函数可以访问常对象中的数据成员,但仍然不允许修改常对象中数据成员的值。const是函数类型的一部分,在声明函数和定义函数都要有const关键字,在调用时不必加const。
例如:
#include <iostream>
using namespace std;
class R
{
public:
R(int r1, int r2) :r1(r1), r2(r2){}
void print();
void print() const;
private:
int r1,r2;
};
void R::print()
{
cout << r1 << ";" << r2 << endl;
}
void R::print() const
{
cout << r1 << ";" << r2 << endl;
}
int main()
{
R a(5,4);
a.print();
const R b(20, 52);
b.print();
return 0;
}
输出结果为:
5;4
20;52
在此基础上进行对于const b中的值无法修改的实验,在原有函数中加入change函数,用于改变r1,r2的值,具体代码如下:
#include <iostream>
using namespace std;
class R
{
public:
R(int r1, int r2) :r1(r1), r2(r2){}
void print();
void print() const;
void change();
private:
int r1,r2;
};
void R::print()
{
cout << r1 << ";" << r2 << endl;
}
void R::print() const
{
cout << r1 << ";" << r2 << endl;
}
void R::change()
{
r1 = r1 + 1;
r2 = r2 + 1;
cout << r1 << ";"<<r2 << endl;
}
int main()
{
R a(5,4);
a.print();
const R b(20, 52);
b.print();
a.change();
return 0;
}
运行结果为:
5;4
20;52
6;5
证明change函数将a中的值成功改变,然后将main函数中的a.change();语句改为b.change();
这时编译器报错:

证明成立
c++:三的更多相关文章
- 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)
前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- Jquery的点击事件,三句代码完成全选事件
先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 简谈百度坐标反转至WGS84的三种思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域
一.前言 结合我们本次系列的第一篇博文中提到的上下文映射图(传送门:如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念),得知我们这个电商网站的核心域就是销售子域.因为电子商务是以信息网络 ...
- 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...
- 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...
随机推荐
- hdu6243
hdu6243结论题,每个的概率是(n-1)/n,然后乘以总数n,结果就是 n-1 #include<iostream> #include<cstdio> #include&l ...
- [Array]283. Move Zeroes
Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...
- 通过Struts2Web应用框架深入理解MVC
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet. 一.用法简介: 1.Eclipse新建Dynamic Web Project, 项目名:Struts2Pro ...
- dom4解析 XML
Java XML解析工具 dom4j介绍及使用实例 Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projec ...
- Xcode8遇到的问题及解决方案!!!
http://blog.csdn.net/jnbbwyth/article/details/52576169 http://www.cocoachina.com/ios/20161227/18451. ...
- day38 10-Spring的Bean的属性的注入
后处理bean,如果是返回bean,那么什么都不做直接把这个类原封不动地给你返回回去. 在它执行一些逻辑方法的时候对它进行逻辑增强,比如说进行时间监控,权限管理,日志的记录等等. 要做肯定是对正常的类 ...
- R语言可视化--ggplot函数
上一篇说了qplot函数,现在说一下ggplot函数 本身不能实现,需要添加层才可以.ggplot2的核心函数 library(ggplot2) ggplot(airquality,aes(Wind, ...
- itextsharp 1.0
1 效果图 2.代码 引用组件: using iTextSharp.text;using iTextSharp.text.pdf;using System;using System.Data;usin ...
- 八.DBN深度置信网络
BP神经网络是1968年由Rumelhart和Mcclelland为首的科学家提出的概念,是一种按照误差反向传播算法进行训练的多层前馈神经网络,是目前应用比较广泛的一种神经网络结构.BP网络神经网络由 ...
- SDUT-3378_数据结构实验之查找六:顺序查找
数据结构实验之查找六:顺序查找 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在一个给定的无序序列里,查找与给定关键字 ...