当前位置:首页 > 旅游指南

const C++ const 的使用

https://www.cnblogs.com/whale90830/p/10542361.html

const对象的一般形式

类型名 const 对象名[(构造实参表列)];const 类型名 对象名[(构造实参表列)];

注意:常量对象必须有初始值(因为以后不能更改)。

2)功能有限:

不能修改定义为常量的对象的所有数据成员的值。

每当调用除const之外的成员函数时,都会出现编译错误。除了构造函数。

时间常数t1(12,34,46);// t1是一个常量对象

t1 . set _ Time();//编译错误PE,不是常量成员函数

T2 . show _ Time();//错误,不是常量成员函数

3)可变成员

当数据成员被声明为可变时,即使是一个const对象也仍然可以修改数据成员值。

常量对象成员1)常量数据成员

const描述的数据成员称为常量数据成员,其值不能更改。

如果在一个类中描述了一个常量数据成员,构造函数只能通过初始化列表初始化数据成员,其他任何函数都不能给成员赋值。

课堂时间

{

constinthour//将hour声明为常量数据成员

time(in):hour(h){ }//通过参数初始化表初始化常量数据成员hour

};

课堂时间

{

constinthour//将hour声明为常量数据成员

时间(分钟)

{

hour = h;//错误

}

};

示例3.30常量数据成员的示例。#include<。iostream.h & gt。

classDate{

公共:

日期(inty,intm,intd);

void show date();

constint&。r;

私人:

constintyear

constitution month;

constintday

};

日期::日期(inty,intm,intd):年(y),月(m),日(d),日(年){ }

inlinevodidate::show date()

{

cout<。& lt" r="<。& ltr<。& ltendl

cout<。& lt年<。& lt"."& lt& lt月份<。& lt"."& lt& lt日<。& ltendl

}

voidmain()

{

日期1(1998,4,28);

date 1 . ShowDate();

}

2)常量成员函数

在类中使用关键字const描述的函数是一个常量成员函数。

常量成员函数的描述格式如下:

类型描述符函数名(参数表)常量;

voidshow_Time()常量;//注意函数名和括号后const的位置

无效时间::显示_时间常数

{

cout<。& lt小时<。& lt分钟<。& ltsec <。& ltendl

}

注意:const是函数类型的一个组成部分。声明函数和定义函数时需要const关键字,调用时不需要添加const。

例3.28经常被引用为函数参数# include

intadd(constitution & amp;我,constint & ampj);

voidmain()

{

inta = 20

intb = 30

cout<。& lta<。& lt"+" & lt;& ltb<。& lt" = " & lt& lt添加(a,b)<。& ltendl

}

intadd(constitution & amp;I,const & ampj)

{

returni+j;

}

如果将一个对象描述为常量对象,那么只能通过该对象调用其常量成员函数,而不能通过普通成员函数调用。此外,常量成员函数不能更新对象的数据成员。

例3.31常量成员函数的使用。#include<。iostream.h & gt。

classDate{

公共:

日期(inty,intm,intd);

void show date();

voidshowDate()常量;

私人:

intyear

intmonth

intday

};

日期::日期(inty,intm,intd):年(y),月(m),日(d){ }

无效日期::显示日期()

{

cout<。& ltshow date 1:“& lt;& ltendl

cout<。& lt年<。& lt"."& lt& lt月份<。& lt"."& lt& lt日<。& ltendl

}

无效日期::显示日期()常量

{

cout<。& ltshow date 2:“& lt;& ltendl

cout<。& lt年<。& lt"."& lt& lt月份<。& lt"."& lt& lt日<。& ltendl

}

voidmain()

{

日期1(1998,4,28);

date 1 . ShowDate();

constDate date2,11,14);

date 2 . show date();

}

常量成员函数只能引用该类中的数据成员,不能修改,即成员数据不能用作语句的左值。

const对象和可变成员子句示例

公共:

时间()

{

hour = 0;

分钟= 0;

}

void set _ Hour(in)const { Hour = h;}

void set _ MINUTE(intm){ MINUTE = m;}

voidshow_Time()常量

{ cout & lt& lt小时<。& lt":& lt& lt分钟<。& ltendl}

私人:

mutableinthour

intminute

};

intmain()

{

时间t1;

t1 . set _ Hour(8);

t1 . set _ Minute(8);

t1 . show _ Time();

时间常数2;

T2 . set _ Hour(8);

T2 . set _ Minute(8);

T2 . show _ Time();

返回0;

}

3)正式成员的使用

a) 如果在一个类中,有些数据成员的值允许改变,另一些数据成员的值不允许改变,则可以将一部分数据成员声明为const,以保证其值不被改变,可以用非const的成员函数引用这些数据成员的值,并修改非const数据成员的值。b) 如果要求所有的数据成员的值都不允许改变,则可以将所有的数据成员声明为const,或将对象声明为const(常对象),然后用const成员函数引用数据成员,这样起到“双保险”的作用,切实保证了数据成员不被修改。c) 如果已定义了一个常对象,则只能调用其中的const成员函数,而不能调用非const成员函数(不论这些函数是否会修改对象中的数据)。如果需要访问对象中的数据成员,可将常对象中所有成员函数都声明为const成员函数,但应确保在函数中不修改对象中的数据成员。指向常对象的指针变量1)指向常对象的指针变量的一般形式

常量类型*指针变量名

constchar * pc//PC指向的字符是常量类型

* pa = ' a//错误:pa指向的目标不能更改

pa++;//正确,pa本身的值是可以改变的

时间t1;

constTime * pt

* pt = t1//错误:pt指向的目标无法更改。2)指针变量指向常量对象的描述

a) 指向常对象(变量)的指针变量,不能通过它来改变所指向目标对象的值,但指针变量的值是可以改变的。b) 如果被声明为常对象(变量),只能用指向常对象(变量)的指针变量指向它,而不能非const型指针变量去指向它。

constinta = 10,b = 20

constint * pa = & ampa .//正确

int * pb = & ampa .//错误:非常量指针

c) 指向常对象(变量)的指针变量除了可以指向常对象(变量)外,还可以指向未被声明为const的对象(变量)。此时不能通过此指针变量改变该变量的值。

pa = & ampb .//正确:也可以指向非常量类型的变量

* pa = 30//错误:指向常量类型的指针无法更改目标值

d) 指向常对象(变量)的指针变量可以指向const和非const型的对象(变量),而指向非const型变量的指针变量只能指向非const的对象(变量)。const int*pa = &b; // 正确

int * pb = & ampa .//错误

e) 如果函数的形参是指向非const型变量的指针,实参只能用指向非const变量的指针,而不能用指向const变量的指针,这样,在执行函数的过程中可以改变形参指针变量所指向的变量(也就是实参指针所指向的变量)的值。

空隙率(时间*点);

时间* p1

constTime * p2

f(P1);//正确

f(p2);//错误

f) 如果函数形参是指向const型变量的指针,允许实参是指向const变量的指针,或指向非const变量的指针。voidg(constTime *pt)

时间* p1

常量时间* p2

f(P1);//正确

f(p2);//正确

g) 基本规则:希望在调用函数时对象的值不被修改,就应当把形参定义为指向常对象的指针变量,同时用对象的地址作实参(对象可以是const或非const型)。如果要求该对象不仅在调用函数过程中不被改变,而且要求它在程序执行过程中都不改变,则应把它定义为 const型对象的常引用

在C++中,常量指针和常量引用经常被用作函数参数。这样既能保证数据安全,又能防止数据被随意修改。调用函数时不需要建立实际参数的副本,可以提高程序的运行效率。

频繁引用对象的例子。classTime{

公共:

时间(int,int,int);

在我们的世界里;

intminute

intsec

};

时间::时间(英寸,英寸,英寸)

{

hour = h;

分钟= m;

sec = s;

}

时间& ampT)// t是对象引用

{ t.hour = 18}

void fun 2(ConstTime & amp;T)// t是经常引用的

{ t.hour = 18//错误}

intmain()

{

void fun 1(& amp;);

void fun 2(ConstTime & amp;);

时间t1(10,13,56);

fun(t1);

cout<。& ltt1 .小时& lt& ltendl

返回0;

}例3.29非常对象和常量对象的比较。#include<。iostream.h & gt。

classSample{

公共:

intm

样本(inti,intj){ m = I;n = j;}

void setvalue(inti){ n = I;}

voiddisply()

{

cout<。& lt" m="<。& ltm<。& ltendl

cout<。& lt" n="<。& ltn<。& ltendl

}

私人:

intn

};

voidmain()

{

样本a(10,20);//如果是:const Sample a(10,20);

a . set value(40);//不能修改常量对象的数据成员

a.m = 30//不能修改常量对象的数据成员

a . disply();//普通对象不能调用普通成员函数

}常量数据Time nstt = Time(1,2,3)的汇总;const Time = Time(1,2,3);

constinta = 10

intconsta = 10

t是常对象,其成员值在任何情况下都不能被改变。 a 是常变量,其值不能被改变

void Time::fun()const;

Fun是Time类的常量成员函数,可以调用,但不能修改这个类中的数据成员(不可变)

Time * constpt

int * constpa

pt 是指向Time对象的常指针, pa 是指向整数的常指针。指针值不能改变。

constTime * pt

constint * pa

pt是指向Time类常对象的指针, pa是指向常整数的指针,不能通过指针来改变指向的对象(值)

1.《const C++ const 的使用》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《const C++ const 的使用》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1314363.html

上一篇

创造营2021甘望星在哪一段出现 甘望星个人资料介绍是哪里人

下一篇

山东毒疫苗事件 山东济南的疫苗大案闹得沸沸扬扬 怎样看待疫苗之殇?

内向的人相亲怎么聊天 嘴笨处对象都聊些什么 初次见面回家后微信聊天什么

  • 内向的人相亲怎么聊天 嘴笨处对象都聊些什么 初次见面回家后微信聊天什么
  • 内向的人相亲怎么聊天 嘴笨处对象都聊些什么 初次见面回家后微信聊天什么
  • 内向的人相亲怎么聊天 嘴笨处对象都聊些什么 初次见面回家后微信聊天什么
怎么问相亲对象家里情况 如何快速了解相亲对象 委婉的问男生家庭条件

怎么问相亲对象家里情况 如何快速了解相亲对象 委婉的问男生家庭条件

相亲一般都是家人同事朋友安排的,对方家世背景也不会差到哪里去,两人相约见面就要开始试着去了解对方,对方的人品、工作、收入都是需要了解的,那么怎么问相亲对象家里情况呢?委婉的问男生家庭条件怎么问?下面就跟见闻坊小编来详细了解一下吧!            怎么问相亲对象家里情况1、在相亲的时...

微信如何礼貌拒绝相亲对象 微信相亲拒绝短信范文 相亲后没感觉怎样拒绝

微信如何礼貌拒绝相亲对象 微信相亲拒绝短信范文 相亲后没感觉怎样拒绝

相亲的时候也是非常看眼缘的,没有眼缘就没有想接触下去的想法,通常男女相亲回家的第一个晚上答案就已经很明显了,是继续交接还是拒绝一般都会在微信交代清楚,那么微信如何礼貌拒绝相亲对象呢?相亲后没感觉怎样拒绝?下面就跟见闻坊小编来详细了解一下吧!            微信如何礼貌拒绝相亲对象1...

零点乐队成员 零点乐队重组后首开个唱工体坐满 观众:没周晓鸥也挺好

北京,上周六晚,零乐队“爱从零开始”北京演唱会在工人体育馆上演。作为时隔十年重返工体的全国巡演第一站,由大毛、赵罗蒙、老吴、杨海东和莎拉组成的“零乐队”以“舒梦辣妹”的新形象亮相,在内地向近万名观众进行了一场极具原创性的热播演出。不仅新主唱老吴的实力得到高度认可,几个成员第一次...

王子文约会对象是唐汉霄 太浪漫了

王子文约会对象是唐汉霄 太浪漫了

最近,一档面型女性群体的综艺《砰然再心动》正式上线,嘉宾阵容非常有意思,邀请了王琳、黄奕、王子文、白冰和蔡卓宜。熟悉这些女星的朋友可能已经看出了端倪,这几个人好像都是离异女星,节目组是想要办一档面对离异女性的综艺吗。在《砰然再心动》中,王子文约会对象是唐汉霄,真的好浪漫。王子文约会对象是唐...

2021优抚对象抚恤标准一览表 2021优抚对象抚恤上调标准 优抚对象2021标准是多少

2021优抚对象抚恤标准一览表 2021优抚对象抚恤上调标准 优抚对象2021标准是多少

现在已经进入2021年2月份,临近过年不少地区都已经下发优抚对象抚恤金,那么2021年优抚对象抚恤金标准是什么呢?2021优抚对象抚恤上调标准出来了吗?下面就跟见闻坊小编来详细了解一下2021优抚对象抚恤标准吧!            2021优抚对象抚恤标准一览表据退役军人事务部官网7月...

优抚对象2021年发放时间 2021优抚对象最新消息 2021重点优抚对象最新消息

  • 优抚对象2021年发放时间 2021优抚对象最新消息 2021重点优抚对象最新消息
  • 优抚对象2021年发放时间 2021优抚对象最新消息 2021重点优抚对象最新消息
  • 优抚对象2021年发放时间 2021优抚对象最新消息 2021重点优抚对象最新消息

过年零点对对象说的话 新年对男友说的一句话

  • 过年零点对对象说的话 新年对男友说的一句话
  • 过年零点对对象说的话 新年对男友说的一句话
  • 过年零点对对象说的话 新年对男友说的一句话