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