-
深入理解C++中常见的关键字含义
2021-01-21 18:19:39const:定义常成员,包括const数据成员和const成员函数,const数据成员必须,也只能通过构造函数的初始化列表进行初始化,const成员函数只能访问类的成员,不能进行修改,如果需要修改,则引入下面的mutable关键字。... -
const关键字的作用?
2021-02-01 13:44:45(1)欲阻止一个变量被改变,可以使用const关键字。...(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量; (5)对于类的成员函数,有时候必须指定其返回值为const类型,以 -
const关键字的作用
2019-09-26 14:52:42(2)修饰类的成员函数时,表示其为一个常函数,意味着成员函数将不能修改类成员变量的值。 (3)在函数声明时修饰参数,表示在函数访问时参数(包括指针和实参)的值不会发生变化。 (4)对于指针而言,可以指定...(1)防止被修饰的成员的内容被改变。
(2)修饰类的成员函数时,表示其为一个常函数,意味着成员函数将不能修改类成员变量的值。
(3)在函数声明时修饰参数,表示在函数访问时参数(包括指针和实参)的值不会发生变化。
(4)对于指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,
const int *b = &a
或者int* const b = &a
修饰的都是后面的值,分别代表*b
和b
不能改变 。(5)
const
可以替代c语言中的#define
宏定义,好处是在log中可以打印出BUFFER_SIZE
的值,而宏定义的则是不能#define BUFFER_SIZE 512 const int BUFFER_SIZE = 512;
注意:const数据成员必须使用成员初始化列表进行初始化。
-
常对象成员
2013-04-24 16:46:42常对象成员包括常成员函数和常数据成员。 1. 常成员函数 使用const关键字声明的函数为常成员函数,常成员函数声明格式如下: 类型 函数名(参数表) const ; 对于常对象成员需要注意以下几点: (1...常对象成员包括常成员函数和常数据成员。
1. 常成员函数
使用const关键字声明的函数为常成员函数,常成员函数声明格式如下:
类型 函数名(参数表) const ;
对于常对象成员需要注意以下几点:
(1) const是函数类型的一个组成部分,因此在实现部分也要带const关键词。
(2) 常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数
(3) 如果将一个对象声明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其他成员函数。
(4) const关键字可以参与区分重载函数。例如,如果在类中有如下声明,则这是对print的有效重载。
void print() ;
void print() const ;
例:如下代码
#include <iostream> using namespace std ; class Sample { int n ; public : Sample(int i) { n = i ;} void print() {cout << "1: n = " << n << endl ;} void print() const {cout << "2: n = " << n << endl ;} } ; void main() { Sample a(10) ; const Sample b(20) ; a.print() ; b.print() ; }
输出如下:
2. 常数据成员
就像一般数据一样,类的成员数据也可以是常量和常引用,使用const声明的数据成员为常数据成员。如果在一个类中声明了n个常数据成员,那么构造函数就只能通过初始化列表对该数据成员进行初始化,其一般格式如下:
构造函数(参数表):常数据成员1(参数1),常数据成员2(参数2),···,常数据成员n(参数n)
其中,冒号后面是一个数据成员初始化列表,它包含一个初始化项,当有多个初始化项时,要用逗号分隔开。“参数1”~“参数n”均为“参数表”中的某个参数。这样,在执行构造函数时自动将“常数据成员1”赋值为“参数1”的值,“常数据成员2”赋值为“参数2”的值,“常数据成员n”赋值为“参数n”的值等。
例:如下代码
#include <iostream> using namespace std ; class Sample { const int n, m ; public : Sample(int i, int j) : n(i), m(j) {} void print() {cout << "n = " << n << ", m = " << m << endl ;} } ; void main() { Sample a(10, 20) ; a.print() ; }
输出如下:
-
C++中的C++关键字浅析
2015-04-15 22:24:21在C++语言中,然后就总结了许多C++关键字,如果不使用常引用、指针,则须用const_cast 1. 修饰常量 ...最基本的用法,用const修饰一个变量...注意要在声明时初始化,如果是类的数据成员,则在构造函数的初始化列表原文地址:http://developer.51cto.com/art/201001/180485.htm
在C++语言中,然后就总结了许多C++关键字,如果不使用常引用、指针,则须用const_cast<>进行转,指向字符char的常指针经常用来表示字符串,像windows中的LPCSTR就是const char *。
1. 修饰常量
最基本的用法,用const修饰一个变量,表示这是一个常量,这种用法可以代替C语言里面的宏定义。注意要在声明时初始化,如果是类的数据成员,则在构造函数的初始化列表中初始化。
- const int a=999; //定义了常量a,代替宏定义
- //const int b; //错误,常量定义时要初始化
- extern const int c; //外部定义的常量不用初始化了
- int const d=0; //与const int等价,写法习惯不同而已
- const long e=0; //同理,把int换成char、long、类是一样的
- class Cls
- {
- public:
- Cls(int a,int b):_a(a) //常数成员要在初始化列表初始化
- {
- _b=b;
- }
- private:
- const int _a;
- int _b;
- };
2. 修饰引用,指针
对一个C++关键字的引用或指针要用常指针,也就是不能修改所引用、指向的变量。如果不使用常引用、指针,则须用const_cast<>进行转换。指向字符char的常指针经常用来表示字符串,像windows中的LPCSTR就是const char *。
- const int &g=a; //a的内容不能改,所以g(a的引用)也是const
- //int &h=a; //错误
- int &i=const_cast<int&>(a); //使用const_cast<>()把常量转成非常量
- int const &j=a; //与const int &等价,写法习惯不同而已
- const int *k=&a; //a的内容不能改,所以k(a的指针)也是const
- int const *l=&a; //与const int *等价,写法习惯不同而已
- //int *m=&a; //错误
- const char *n="string"; //字符串“string”内部字符不能改变了
- char *o="string2"; //字符串“string2”可以修改
3. 修饰对象
如果修饰的是一个对象,则表示该对象的数据成员均为常量,并且只能调用该对象的常成员函数,这一点在后面解释。综合1、2、3条得出,const修饰符表示所修饰的内存区域被上了锁,不能修改。
对一个对象的常引用经常用来函数传参,当函数参数为对象是,直接按值传参会调用对象拷贝构造函数,复制对象,对程序效率造成影响,所以一般按引用传参,为了不改变传入的参数,要加const表示是常引用。
- const int &g=a; //a的内容不能改,所以g(a的引用)也是const
- //int &h=a; //错误
- int &i=const_cast<int&>(a); //使用const_cast<>()把常量转成非常量
- int const &j=a; //与const int &等价,写法习惯不同而已
- const int *k=&a; //a的内容不能改,所以k(a的指针)也是const
- int const *l=&a; //与const int *等价,写法习惯不同而已
- //int *m=&a; //错误
- const char *n="string"; //字符串“string”内部字符不能改变了
- char *o="string2"; //字符串“string2”可以修改
4. 另外一种const修饰指针的方法
也就是著名的const char *和char * const的区别的问题。const char *前面说过,意思是常指针,char*所指的内存区域不能被修改,用来表示字符串。而char * const的意思指针所指向的位置不能修改,C++关键字也就是该指针不能指向其他内存区域了,这和引用很像,char * const相当于char &,所以常引用const char &相当于const char * const,也就是指针指向谁不可变,指针指向的内容也不可变。注意const是写在了*的前面还是后面,这是唯一区别,char const *的意思和const char *是一样的。
-
C++笔记之类的静态成员(static)、友元(friend)和常对象(const)
2020-04-10 23:48:09静态成员(关键字:static)是解决同一个类的不同对象之间数据和函数共享问题。区分全局变量,全局变量也能实现数据共享,但安全性和封装性被破坏了。 2.静态数据成员 (1)使用关键字static在类内声明,类外定义和... -
C++中const关键字的使用指南
2014-07-19 15:33:49使用const关键字描述的变量或对象的值是不能够被改变的。const使用得当的代码会更易维护,可靠性更强,我们应该尽可能的使用const,这会使你的程序获益良多,但前提是你必须搞清楚原委。...如果是类中的常数据成员,那 -
常对象成员与静态成员
2020-04-28 23:21:22常对象成员: 在类声明时,在成员变量前面加上关键字const,即将成员声明为const;例const int a。 可以将其看做通过宏定义的常变量;...只能通过构造函数参数初始化表对常数据成员进行初始化。例Time::Time(int h)... -
const关键字应用
2018-05-07 11:15:08const关键字应用欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了;...对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类... -
C++静态成员和常成员
2018-03-03 11:10:46类中的非静态数据成员,每一个类对象都拥有一个副本,即每一个对象的同名数据成员可以存储不同的数值,这是保证了每个对象拥有区别于其他对象的特征。 而静态成员是不管创建了多少个对象,他们之间只有一个副本,也... -
常成员函数
2009-07-23 10:52:001.如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们。例如:void get_time()const;//const的位置在函数和括号之后 const是函数类型的一部分,在声明函数和定义函数的时候都要用const... -
C++常成员函数
2013-09-10 22:41:16使用const关键字进行声明的成员函数被称为常成员函数 ...(3)常成员函数不能用来更新类的成员变量,因此常成员函数中只能调用常成员函数。如果调用其他普通函数,可能会引起间接修改数据成员 (4)其他函数可 -
c++ const修饰成员函数(常函数和常对象)
2020-12-19 23:07:42常函数内不能修改类的数据成员属性。 成员属性声明的时候加关键字mutable后,在常函数中就可以修改,相当于获得了一个比较高的权限。 常对象 声明对象的时候在前面加上const即可变成常对象。 常对象只能访问常函数... -
[零食时间]C++语言 常函数详解(极其详尽)以及静态成员详解
2020-03-22 23:17:48常函数 C++常成员函数用法 在一个普通成员函数后面加上const修饰,就是常成员函数 返回值 函数名(形参表)const {函数体} ...(本类数据成员有“mutable”关键字修饰时可以通过常成员函数修改。); ②常成员函数... -
函数声明后面的const是什么意思
2013-05-23 21:56:51这是用在类成员函数的声明和定义中,常成员函数使用const关键字说明的函数,表示函数可以对const对象进行操作,但是不能改变数据成员的内容. 为了安全 保护数据不被无意的破坏. 在类的成员函数之后加上 const ... -
用const保护数据(C++)
2018-11-06 09:42:28C++提供了很多有效的措施增加数据的安全性,为了能使...用关键字const来声明常数据成员。 1.2 常成员函数:常成员函数只能引用本类中的数据成员,而不能修改他们。 2.常对象: 常对象只能调用常成员函数,非常... -
C++ 常对象和常函数
2020-12-01 00:56:21常函数 在成员函数的声明及定义的形参括号后边加上const...在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const。所以 const 关键字对成员函 -
c#中结构体和类的比较.docx
2020-09-12 11:15:47PAGE / NUMPAGES c#中结构体和类的比较 区别 结构是一种用关键字struct声明的自定义数据类型与类相似也可以包含构造函数常数字段方法属性索引器运算符和嵌套类型等不过结构是值类型 1.结构的构造函数和类的构造函数... -
常函数(C++)
2018-10-25 15:29:28举例: bool functionName() const; 解释:声明了一个名为functionName的函数,该...关于C++中,类的常成员函数 声明样式为: 返回类型 &amp;amp;lt;类标识符::&amp;amp;gt;函数名称(参数表) con... -
面向对象程序中的常量
2014-10-12 09:54:29其作用和用法与一般常变量(const变量)相似,但常数据成员的值是不能改变的。 注意:只能通过构造函数的参数初始化表对常数据成员进行初始化,不能采用在构造函数中对常数据成员赋初值的方法。 例如: 如在类... -
寒假学习笔记(4)
2018-02-11 21:30:002018.2.11 类中的常成员 关键字const,在类定义中声明数据成员使用关键字限定,...定义含常数据成员类的对象时需要初始化,给出常数据成员的初始值。 函数声明:double Getcost() const; 常函数成员只能读类中的... -
C++中的const
2012-06-09 15:08:08常对象的数据成员值在对象的整个生存期间内不能被改变。常对象必须进行初始化,而且不能更新。 还可以用const修饰类成员,如下: 1.常成员函数 使用const关键字修饰的函数为常成员函数,常成员函数声明的... -
谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar
2013-06-13 22:35:218.2 类的声明和对象的定义 8.2.1 类和对象的关系 8.2.2 声明类类型 8.2.3 定义对象的方法 8.2.4 类和结构体类型的异同 8.3 类的成员函数 8.3.1 成员函数的性质 8.3.2 在类外定义成员函数 8.3.3 inline成员函数 8.3.4... -
const的作用--学习笔记
2020-07-13 19:31:141. const关键字的作用 欲阻止一个变量被改变,可使用...对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的成员变量; 对于类的成员函数,有时候必须指定其返回值为const类型,以使 -
数据结构(C++)有关练习题
2008-01-02 11:27:182、要求的图如下,也可以自己构造图,但是需要注意的是,图不能是退化的单链表: 实验报告要求: 1、 按要求记录下图的类的完整实验代码; 2、 纪录你所使用的图; 3、 按要求记录下要求的输出... -
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷1
2010-06-23 17:33:55类是用户定义的类型,对象(如变量)是类的实例。本章介绍面向对象编程和类设计。对象声明描述的是存 储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对于外界来说是可见的(公有部 分),而某些... -
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷2
2010-06-23 17:47:19类是用户定义的类型,对象(如变量)是类的实例。本章介绍面向对象编程和类设计。对象声明描述的是存 储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对于外界来说是可见的(公有部 分),而某些... -
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷3
2010-06-23 18:03:39类是用户定义的类型,对象(如变量)是类的实例。本章介绍面向对象编程和类设计。对象声明描述的是存 储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对于外界来说是可见的(公有部 分),而某些...
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
【布道者】Linux极速入门
-
NFS 实现高可用(DRBD + heartbeat)
-
程序员必须清楚的专业名词,你知道几个?
-
培训效果跟踪表.doc
-
培训效果评估表.doc
-
access应用的3个开发实例
-
HibernateTransactionManager LocalSessionFactory spring hibernate 集成
-
MySQL 性能优化(思路拓展及实操)
-
Servlet的生命周期
-
iptables 企业级防火墙配置(四表五链)
-
直播源码搭建教程之在h5 video中的直播
-
FTP 文件传输服务
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
培训效果评估调查问卷(修改版).docx
-
纯css14种气泡效果
-
android游戏开发大全!一次关于JVM的面试经历,在线面试指南
-
js大于等于小于等于书写
-
Jsplumb从入门到实战
-
PPT大神之路高清教程