#include<iostream>
using namespace std;
/*
*const修饰符
*1.const可以修饰数据成员,成员函数,类对象
*2.修饰数据成员的时候:初始化的位置只能在参数列表里面。
* 虽然你在构建类成员的时候能给初始值
* 但是我们构造类成员是用来定义类型的。
* 类型里面怎么可能有数字呢。
* 被const修饰的数据成员,不能被修改。
*3.修饰成员函数
* 位置
* int const func()和const int fun()是一样的
* 类比 int const a 和const int a。
* 你 int func(const )这样就是修饰参数
* 所以,const修饰函数放到,声明之后,实现体之前,大概也没有别的地方可以
* 放了。
* int func()const
* {
*
* }
* 意义在于声明这个函数为const,保证不会修改数据成员。
* 能访问const和非const 数据成员 但不能修改非const数据成员
* 只能访问 const的成员函数
* 还可以构成重载,
* 什么意思呢,看下面的例子
* 你可以有
* void dis() const
* {
*
* }
* 也可以有
* void dis()
* {
*
* }
* const 成员函数要求在声明和定义处都要有const
*4. 还可以修饰类对象
* const 修饰函数 是从函数的层面不修改数据
* const 修饰对象,是从对象的层面不修改数据,只能调用const成员函数
* 非const成员对象,优先调用非const成员函数,如果没有非const成员函数
* 就调用const成员函数
*
*const A b;
*/
class A
{
public:
A(int a=0)
:val(a)
{
}
void print()
{
x=200;
y=300;
}
//如果你的对象是const的时候,访问的就是void display const,不能访问void display
//如果你的对象是非const的时候,你可以访问const也可以访问非const。优先调用
//非const成员函数,若无非const成员函数,就去调用const成员函数
void display() const
{
cout<<val<<endl;
//x=200 这里会报错,因为你这个函数被设置成const
//但是你自定义的是可以的。比如
int a;
a=200;
cout<<"const"<<endl;
// print();
// x=200;
}
/*
void display()
{
print();
cout<<"no const"<<endl;
}
*/
private:
const int val;
int x,y;
};
int main()
{
A a(1000);
a.display();
return 0;
}
C++学习day15之const
最新推荐文章于 2021-07-08 22:38:12 发布