标签:地址 全局 改变 cos 初始 参数初始化 cout 类外定义 main
关键字const
用const修饰的东西,初始化后就无法改变,用于保护数据
常对象 |
类名 const 对象名[实参表] const 类名 对象名[实参表] |
A const a() const A a() |
常成员数据 | const 数据类型 数据名 | const int a |
常成员函数 | 类型名 函数名(参数表)const |
int a()const{} pubic int a()const{} |
常指针 | 类名 * const 指针名 |
A * cosnt p A * const p=&a; |
指向常对象的指针 | const 类型 * 指针名 | const A *p |
构造函数不能用const修饰
参数表只能构造函数使用
常对象必须定义时就初始化,之后就不变了。类的常对象,除了创建时自动用构造函数,销毁时自动用析构函数外,它只能调用常成员函数。
常成员数据的初始化只能通过构造函数的参数表进行初始化,如果没有初始化,会报错,初始化后就无法更改
class Box //长方体类 { //补充2个成员函数使程序可以执行 // 在此处补充你的代码 /** * 注意:构造函数不能使用const修饰 * const数据成员只能在构造函数的初始化表中初始化 * const成员函数中不允许修改任何数据成员的值,但可以使用他们 * const对象只允许调用const成员函数 */ public : Box(int a,int b,int c) :length(a),width(b),height(c){}//使用构造函数的参数初始化表进行常成员数据的初始化 int area()const { int a=(length*width+length*height+width*height)*2;//函数自己定义的变量 kk=58;//全局非const变量 return kk; } private: const int length; //长 const int width; //宽 int height; //高 };
int main()
{
const Box b(1, 1, 1);
cout << b.area() << endl; //输出表面积 如果area不是常成员函数,就不能调用
return 0;
}
常成员函数不能修改任何成员数据的值,但可以直接使用,只是不能用类里面定义的成员数据,类外定义的全局非const变量可以改,函数内自己定义的变量可以改
常指针 保护指针 指向变量后指针存的地址无法更改,指针指向的变量可以改变,无法指向常变量
int a=0; const int a=0;
int *const p=&a; int *const p=&a; //会报错,不能指向常变量
a=9;//变量可以改变
*p=9;//报错,不能通过指针改变变量的值
int b=5;
p=&b;//会报错,不能更改指向
指向常变量的指针,不保护指针,它可以指向非const修饰的变量,防止非const变量被通过指针修改
int a=0; const int a=0;
const int *p=&a; //可以指向变量 const int *p=&a; //可以指向常变量
a=9;//不报错,变量可以改变 a=9;//报错,常变量不能改变
*p=9;//报错,不能通过指针改变变量的值 *p=9;//报错,不能通过指针改变变量的值
int b=5; int b=5;
p=&b;//不会报错,能更改指向 p=&b;//不会报错,能更改指向
无论是常指针还是指向常变量的指针,都不能通过指针改变量的值
标签:地址 全局 改变 cos 初始 参数初始化 cout 类外定义 main
原文地址:https://www.cnblogs.com/xingers/p/11794785.html