const成员

const,表示不可变的,用const关键字保存程序元素不变

const修饰变量

const int i=10;

const修饰变量i,使i变为常量,若修改i的值编译器会报错。

const修饰指针

1. 指向const变量的指针

const char *u;
char const *v;

const在*左边,在类型左边右边都可以,v和u都表示一个指针,指向const char类型变量的指针。
它可以用来使任何字符或数组不可变,但是它指向的值不能被改变。
3. const指针

int x=1;
int* const w=&x;

const在*右边,w是一个指针,是指向整型的常量的指针,它不能再指向别的变量,但指向的变量的值可以修改
4. 指向常量的常量指针

const int *const a;

指针a不能再指向别的常量,指向的值也不能被改变。

const修饰函数参数

1.值传递
传递一份参数的拷贝给函数,只会修改拷贝,无法修改原函数,所以不需要声明const
2.指针传递
指针传递会造成浅拷贝,拷贝一份指针给函数而不会拷贝一份原始对象,因此,给指针参数加上顶层const可以防止指针指向被篡改,加上底层指针防止指针指向对象被篡改。
3.引用传递
引用是对象一个别名,不需要拷贝对象,减小开销,给引用底层加上底层cosnt,减小开销,又可以防止修改底层引用对象。

const修饰成员函数

void Dispaly()const
{
	cout <<_year <<"-"<< month<<"-"<<day<< endl;
}

const修饰的成员函数,实际修饰该成员函数隐藏的this指针,表明在该成员函数中不能对类的任何成员进行修改。

void Display(const Date* this)
{
	cout <<_year <<"-"<< month<<"-"<<day<< endl;
}

注意

void Display()
void Display1()const
  1. const对象不能调用非const成员函数
int main()
{
	const Date d1;
	d1.Display1();//d1为const成员,不可修改
}
  1. 非const成员可以调用const成员函数
int main()
{
	Date d1;
	d1.Display();//d1没有要求,可改可不改
}
  1. const成员函数内不可调用其他非const成员函数
void Display1()//只读
{
	Display();//可读可写
	//该函数内可以修改成员,而Display1内不可修改,范围大于Display1(),不可调用
}
  1. 非const成员函数内可以调用const成员函数
void Display()//可读可写
{
	Display();//只读
}
发布了34 篇原创文章 · 获赞 4 · 访问量 1748

猜你喜欢

转载自blog.csdn.net/qq_41181857/article/details/103990732
今日推荐