C++_const常量
来源:互联网 发布:知乎嗜血法医 编辑:程序博客网 时间:2024/05/01 18:24
1.符号常量
对于符号常量:用一个标识符代表的常量,在程序中用#define命令定义某个符号代表的常量。
#define M "男"#define W "女"#define pi 3.1415
2.const常量
对于const常量:冻结变量,修饰类型描述符。
const double pi = 3.14159265;特点:被const冻结的对象不能再被更新,所以在定义时必须初始化。
const int a = 500,b = 20;//或者int const a = 500,b = 20;a = 700;b = 30;//错误
(1)指向常量的指针
指针指向的变量不可变,指针本身的值可变。
#include<iostream>using namespace std;int main(){ const int a = 18; const int b = 20; const int *p = &a; int c = 11;// a = 98;//出错// *p = 99;//出错// p = &b;// *p = 33;//出错// p = &c;// *p = 23;//出错,虽然c不是const,但是规定p指向的变量值不能变 cout << *p << endl; cout << &a << endl; cout << p <<endl; return 0;}
(2)指针常量
定义时,在指针前面加const,标识指针本身是常量,不可以改变指针的指向,但是指针指向的变量的值可以改变。
#include <iostream>using namespace std;int main(){ int a = 100, b = 200; int *const p1 = &a;//定义指针常量 int *p2 = &b; cout << *p1 << " " << *p2 << endl; *p1 = 300;//改变a值// p1 = &b;//错误,指针常量不可以改变指向 p2 = &a; cout << *p1 << " " << *p2 << endl; cout << a << " " << b << endl; return 0;}<strong></strong>
(3)指向常量的指针常量
#include <iostream>using namespace std;int main(){ const int a = 1; int b = 2; const int * const p1 = &a;//p1为指向常量的指针变量 const int * const p2 = &b;//p2为指向常量的指针变量// p1 = &b;//出错// p2 = &a;//出错// *p1 = 22;//出错// *p2 = 23;//出错,p2为指向常量的指针变量,尽管b不是const常量// a = 25;//出错,a是const常量 b = 24; cout << *p1 << " " << *p2 << endl; return 0;}
(4)用const限定引用
一般情况下,在调用函数时,需要建立实参的副本,就是说把实参拷贝给形参,如果被传递的数据类型很大,开销也很大。如果采用指针或引用的形式,则不需要建立副本,但是会产生实参被修改的危险。如果调用函数时不建立副本以提高运行效率,又不希望有实参被改动的危险,则采用传递const指针或const引用(即:实参是地址或引用,形参定义成const型的指针或引用)的方法。#include <iostream>using namespace std;int fn(const int &c){ return c;}int main(){ int a = 1; cout << fn(a) << endl; return 0;}
3.const应用于对象中
既要使数据能在一定范围内共享,又要保证它不被任意修改,这时可以使用const,即把有关的数据定义为常量。
举例:
Time const t1 t1是常对象,其值在任何情况下都不能改变;
void Time::fun() const fun是Time类中的常成员函数,可以引用,但是不能修改本类中的数据成员;
Time *const p p是指向Time对象的常指针,p的值(即p的指向)不能改变;
const Time *p p是指向Time类常对象的指针,其指向的类对象的值不能通过指针来改变;
const Time &t1 = t t1是Time类对象t的引用,二者指向同一段内存空间。
常成员函数
格式:类型说明符 函数名(参数表) const
这里的const是函数类型的一个组成部分,因此在实现部分也要带const关键字,const关键字可以被用于参与对重载函数的区分,通过常对象只能调用它的常成员函数。
常数据成员
使用const说明的数据成员。
例:常成员函数举例
#include<iostream>using namespace std;class point{private:int x;int y;public:point(int vx, int vy):x(vx),y(vy){}void print();void print() const;};void point::print(){cout << "调用print函数" << endl;cout << "x = " << x << ", y = " << y << endl;}void point::print() const{cout << "调用print const函数" << endl;cout << "x = " << x << ", y = " << y << endl;}int main(){point p1(1, 2);p1.print();point const p2(2, 3);p2.print();getchar();}/*运行结果:调用print函数x = 1, y = 2调用print const函数x = 2, y = 3*/
例:常数据成员举例#include <iostream>using namespace std;class A{private:const int a;static const int b;//静态数据成员public:A(int i):a(i){}//带参数的构造函数void print(){cout << a << " " << b << endl;}};const int A::b = 10;//静态数据成员初始化int main(){A a1(11);a1.print();getchar();}/*11 10*/例:常引用做参数
#include<iostream>using namespace std;class point{private:float x;float y;public:point(float vx, float vy):x(vx),y(vy){}friend float distance(const point &a, const point &b);};float distance(const point &a, const point &b)//两点之间的距离,传入的参数为常引用{float X = a.x - b.y;float Y = a.y - b.y;float distance;distance = sqrt(X * X + Y * Y);return distance;}int main(){point p1(0, 0), p2(1, 1);cout << "distance:" << distance(p1, p2) << endl;getchar();}/*运行结果:distance:1.41421*/
1 0
- C++_const常量
- C++_Const
- c++_const
- 5_const.c
- C++_Const的使用
- c++_const用法2
- C++_Const的使用
- C++_const使用大全
- C++_const成员函数
- C++_const详解
- C++_const详解2
- C++(2)_const
- C++_Const的使用(2)
- C++_const限定修饰符
- C++_Const的使用(2)
- C语言32个关键字_const
- C语言深度剖析--读书笔记7_const关键字
- C++Primer学习札记_const限定符详解
- SVN中检出(check out)、导出(export)、导入(import)、add(添加)、update(更新)的区别
- MPAndroidChart
- C#实现获取磁盘空间大小的方法
- Android Studio启动模拟器时老是黑屏,显示“Android”字样
- Delphi中TStringList类常用属性方法详解
- C++_const常量
- [知识总结(转)]flex布局实例篇
- 浅谈C++中指针和引用的区别
- spring+mybatis整合
- iOS基础之图片平铺
- Java函数参数传递方式详解
- Linux高级文件操作 -4
- JAVA之类加载机制与反射(一)
- 深入浅出RxJava(二:操作符)