#include<iostream>
using namespace std;
int test_cincan(const int c){
// c++;//3、const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
return c;
}
int test_cuanp(const int *t){//3、在传指针或者引用的时候可以保护实参所指的变量
// *t = *t + 1;
// (*t)++;
// *t++;//要是这么写,返回就是0
return *t;
}
class complex{
public:
//1、如果【类的成员变量】有const类型的变量,那么该变量必须在类的初始化列表中进行初始化
complex (double r = 0,double i = 0,int a = 0):re(r),im(i),as(a) {}//
complex& operator +=(const complex&);
//下面这些都是常函数,也就是const成员函数
double real() const{return re;}//常函数(常成员函数),const位于成员函数的后面
double imag() const{return im;}//const成员函数访问【非const数据成员】
double test_const() const{return as;}//const成员函数访问【const数据成员】
// double test_2() const{return im++;}//4、【常函数】不能修改类的【数据成员】
//下面这些是非const成员函数
double test_3() {return re;}//非const成员函数访问【非const数据成员】
double test_4() {return as;}//非const成员函数访问【const数据成员】
private:
double re,im;//1、const类型变量必须定义的时候进行初始化
const int as;
};
int main(){
complex c1(2,1,10);
const complex c2(2,1,11);//常对象,const位于对象前面
cout<<c1.imag()<<endl;//6、【const成员函数】可以访问 【非const对象】的【非const数据成员】
cout<<c1.test_const()<<endl;//6、const成员函数可以访问 非const对象的【const数据成员】
cout<<c2.imag()<<endl;//6、【const成员函数】可以访问 【const对象】的【非const数据成员】
cout<<c2.test_const()<<endl;//6、【const成员函数】可以访问 【const对象】的【const数据成员】
cout<<c1.test_3()<<endl;//7、【非const成员函数】可以访问【非const对象】的【非const数据成员】
cout<<c1.test_4()<<endl;//7、【非const成员函数】可以访问 非const对象的【const数据成员】
// cout<<c2.test_3()<<endl;//7、【非const成员函数】不可以访问【const对象】的【所有成员数据】
// cout<<c2.test_4()<<endl;
// const complex c2(2,1,11);//常对象,const位于对象前面
// cout<<c2.test_3()<<endl;//4、【类的常对象】只能访问【类的常成员函数】
cout<<c2.imag()<<endl;
//上面的是类里面的操作,下面的是一些const的基本操作
int test2 = 10;
cout<<test_cincan(test2)<<endl;//3、const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
int *test_p = &test2;
cout<<"测试传指针的时候加const:"<<test_cuanp(test_p)<<endl;
int const test3 = 10;
int * pv = const_cast<int *>(&test3);
cout<<"测试const_cast:"<<pv<<endl;
*pv = 20;
cout<<"测试const_cast:"<<pv<<endl;
// const int te;//1、定义const变量的时候通常要初始化
// te = 10;//1、阻止变量被改变
//2、const和指针的三种情况
int test1 = 1;
int qwb = 111;
int const *p1 = &test1;//和const int *p1 = &test1;一样//2、指定【指针本身】为const
int *const p2 = &test1;//2、指定 指针所指的数据为const
int *p3 = &test1;
int const *const p4 = nullptr ;
// *p4 = 10;
// *p1 = 30;///2、*p1的值不可以改变
*p2 = 30;
*p3 = 10;
p1 = &qwb;//2、*p1的值不可以改变,但可以通过给p赋值不同的地址改变这个指针指向。底层指针表示指针所指向的变量是一个常量
// p2 = &qwb;//2、p2的值不可以改变
p3 = &qwb;
cout<<&test1<<endl;
cout<<p1<<endl;
cout<<*p1<<endl;
cout<<p2<<endl;
//8、对于函数,const可以放三个位置:1、修饰返回值(导致不能做左值)2、修饰参数3、修饰函数
return 0;
}
const用法总结
最新推荐文章于 2022-04-15 00:24:59 发布