C++ 中函数和const关键字







#include  <iostream>
using   namespace   std;


class   A
{
int   data;
public:
int value1 = 10;
const int value2  = 20;  

A(int   da = 18) :data(da) {}


void   display1() { cout << data; }
void   display2()   const { cout << data; }
void   display3()   const
{
data += 100;   //error : 后面的const函数修饰符决定了,不能对类成员进行修改,且只能被 const修饰的A类的实例引用
}


const int GetData() const {
return data;
}


const int& GetValue() const {
return data;
}


const int* GetAge() const {
return &data;
}
};


void   main()
{
A   a1(18);
const   A   a2(28);    //const修饰的A类的实例a2,只能引用该类的const成员函数
//..................................................................................................................................
a1.display1();
a1.display2();        //非const修饰的对象,可以调用const修饰的类成员函数
a1.dispaly3();       //error   ,const声明的成员函数不能改变数据成员的值 
a1.value1;
a1.value1 += 1;
a1.value2;  
a1.value2 += 1;  //只读


a2.display1();       //error   ,const对象不能调用非const函数 
a2.display2();       //right 
a2.display3();       //error   ,const对象不能改变数据成员值 
a2.value1;
a2.value1 += 1;   //只读 
a2.value2;
a2.value2 += 1;  //只读


//..................................................................................................................................
//const int GetData() 返回类型const修饰符有什么用?No point?
int var1 = a1.GetData();
const int  var2 = a1.GetData();
int var3 = a2.GetData();
const int var4 = a2.GetData();


int data1 = a1.GetValue();     //right
const int  data2 = a1.GetValue();
int data3 = a2.GetValue();    //right
const int data4 = a2.GetValue();




int& Value1 = a1.GetValue();     //非const修饰dValue1,不能引用返回值被const修饰返回值的函数;
const int&  Value2 = a1.GetValue();
int& Value3 = a2.GetValue();    //非const修饰dValue1,不能引用返回值被const修饰返回值的函数;
const int& Value4 = a2.GetValue();


int* age1 = a1.GetAge();     //非const修饰age1,不能引用返回值被const修饰返回值的函数;
const int*  age2 = a1.GetAge();
int* age3 = a2.GetAge();    //非const修饰age3,不能引用返回值被const修饰返回值的函数;
const int* age4 = a2.GetAge();
}


猜你喜欢

转载自blog.csdn.net/danteshenqu/article/details/79053155