C++, const:
问题:
- const成员函数和普通成员函数可以是同名同参数吗? 可以,这是一种函数的重载。
- const成员函数可不可以修改对象的成员变量的值? 不可以修改。//error C3490: 由于正在通过常量对象访问"year",因此无法对其进行修改
- 非const成员函数是否可以访问const对象成员? 不可以访问。 //error C2662: "Time::show_time": 不能将"this"指针从"const Time"转换为"Time &"
- const成员函数是否能调用非const成员函数?不能。
- const成员函数能否访问非const成员变量?能。
1. const成员函数和普通成员函数可以是同名同参数的,这是一种函数的重载。
#include "stdafx.h"
#include <iostream>
using namespace std;
class Time
{
public:
Time():year(2015)
{
}
void show_time (void) const
{
cout<<"year:"<<year<<endl;
}
void print (int i)
{
cout<<"fun i:"<<i<<endl;
}
void print ( int i) const
{
cout<<"const fun i:"<<i<<endl;
}
private:
const int year;
};
int _tmain(int argc, _TCHAR* argv[])
{
Time time;
time.show_time();
time.print(1);
Time const ctime;
ctime.show_time();
ctime.print(1);
system("pause");
return 0;
}
/*
year:2015
year:2015
请按任意键继续. . .
*/
2. const成员函数不可以修改对象的成员变量的值。
class Time
{
public:
void show_time (void) const
{
cout<<"year:"<<year<<endl;
year = 11;//error C3490: 由于正在通过常量对象访问"year",因此无法对其进行修改
}
private:
int year;
};
3. 非const成员函数不可以访问const对象成员:

4. Const成员函数不能调用非const成员函数;
class Time
{
public:
Time():year(2015)
{
}
void show_time (void) const
{
cout<<"year:"<<year<<endl;
print(11);//error C2662: "Time::print": 不能将"this"指针从"const Time"转换为"Time &"
}
void print (int i)
{
cout<<"fun i:"<<i<<endl;
}
private:
int year;
};
5. const成员函数能访问非const成员变量。但是不能修改。
class Time
{
…
void show_time (void) const
{
cout<<"year:"<<year<<endl;
}
…
private:
const int year;
};
参考:
C++, const:的更多相关文章
- @清晰掉 c语言三"巨头" const:volatile:static
const: 1.如果把const放在变量类型前,说明这个变量的值是保持不变的(即为常量),改变量必须在定义时初始化,初始化后对她的任何赋值都是非法的. 2.当指针或是引用指向一个常量时,必须在类型名 ...
- 面试问题5:const 与 define 宏定义之间的区别
问题描述:const 与 define 宏定义之间的区别 (1) 编译器处理方式不同 define宏是在预处理阶段展开: const常量是编译运行阶段使用: (2) 类型和安全检查不同 ...
- ES6新特性:let和const的使用
(声明, 本文的所有代码均在node的最新稳定版本v4.4.3中执行的, 如果在浏览器中执行请把JS的运行环境提升为ES6) 以前一直用var定义变量, 现在有了两种新的定义变量的方式, 1: let ...
- Effective C++ 之 Item 3:尽可能使用 const
Effective C++ Chapter 1. 让自己习惯C++(Accustoming Yourself to C++) Item 3. 尽可能使用 const (Use const whenev ...
- C++ Prime:指针和const
与引用一样,也可以令指针指向常量或非常量,类似于常量引用,指向常量的指针不能用于改变其所指对象的值.要想存放常量对象的地址,只能使用指向常量的指针: const double pi = 3.14; / ...
- C# 总结const、 readonly、 static三者区别:
总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time con ...
- es6(一):es6介绍以及let,const
es是js的规范,而js是具体实现 将es6转化为es5代码工具:运用的多的是babel 在线转换地址:babel,traceur(属于谷歌) 1.let申明变量:let其实可以完全取代var,并 ...
- 转:总结const、readonly、static三者的区别
const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编译时常量的原因是它编译时会将其替换为所对应的值: b.静态 ...
- 简单了解一下:var 、let、const
var 重新赋值,重新定义,作用域 属于:function scope: let 声明的变量只在 let 命令所在的代码块内有效,Block scope. const 声明一个只读的常量,一旦声明,常 ...
随机推荐
- Power Strings(kmp妙解)
Power Strings Time Limit : 6000/3000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Tota ...
- Memcached安装卸载
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.Memcached ...
- golang高级部分
一.golang之OOP(orient object programming) 在函数声明时, 在其名字之前放上一个变量, 即是一个方法. 这个附加的参数会将该函数附加到这种类型上, 即相当于为这种类 ...
- css3系列教程--animation
Animation:动画animationshi css的动画效果.需要定义keyframe动画对象来实现.为了兼容苹果/chrome,firefox,ie每次定义需要添加-webkit-,-moz- ...
- Home键屏蔽
公司要开发一款智能终端,设备中预装了本公司开发的软件,但是为了避免用户进入Android系统的界面,这个时候我们就需要对其中的按键加以屏蔽,尤其是Home键,在普通的情况下,当我们点击Home按键的时 ...
- doT.js 模板引擎的使用
dot.js是一个模板框架,在web前端使用. dot.js作为模板引擎, 主要的用途就是,在写好的模板上,放进数据,生成含有数据的html代码. 这是很简单的web前端模板框架, 简单说几个东西,你 ...
- Python下的机器学习工具sklearn--数据预处理
1.数据标准化(Standardization or Mean Removal and Variance Scaling) 进行标准化缩放的数据均值为0,具有单位方差. from sklearn im ...
- aspose.words 处理word转PDF
处理如下: import com.aspose.words.Document; import com.aspose.words.SaveFormat; import com.platform.cust ...
- ctype.h 字符分类与转换
函数及说明 1 int isalnum(int c)该函数检查传递的字符是否是字母数字. 2 int isalpha(int c)该函数是否传递的字符是字母. 3 int iscntrl(int ...
- MySQL存储过程(转载)
转自:http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html 1.1 CREATE PROCEDURE (创 ...