之前总结了一篇const相关的文章“
const使用小结”,在这里做点补充。
1.const可用于函数重载,见下例中的类成员函数:void out()和void out() const;
2.函数后跟着const,表示:const的函数不能对其数据成员进行修改;如果想更改函数内数据成员,使用mutable 。
3.const函数中,不能对其数据成员进行修改,但可以对其指针成员的“指向数据”修改;
4.const的对象,不能引用非const的成员函数;下列中const对象只会调用const函数;
5.类成员const常量(引用)的初始化只能在构造函数初始化列表中初始化,而不能在构造函数函数体内初始化。
详见代码:
1.const可用于函数重载,见下例中的类成员函数:void out()和void out() const;
2.函数后跟着const,表示:const的函数不能对其数据成员进行修改;如果想更改函数内数据成员,使用mutable 。
3.const函数中,不能对其数据成员进行修改,但可以对其指针成员的“指向数据”修改;
4.const的对象,不能引用非const的成员函数;下列中const对象只会调用const函数;
5.类成员const常量(引用)的初始化只能在构造函数初始化列表中初始化,而不能在构造函数函数体内初始化。
详见代码:
#include <iostream>
using namespace std;
class base
{
public:
int *p_;
int **pp_;
};
class derived:public base
{
int num;
const int num2;
int *p_test;
public:
derived():num2(10)//const常量的初始化只能在构造函数初始化列表中初始化
{
int a =10;
num = a;
p_test = &a;
p_ = new int;
pp_ = &p_;
}
void out()
{
cout<<__LINE__<<": "<<__func__<<endl;
num++;
cout<<"num = "<<num<<endl;
}
//const用于函数重载
void out() const
{
cout<<__LINE__<<": "<<__func__<<endl;
//const内的变量不能赋值
//num++;
int &a = **pp_;
//对指针指向的地址地方赋值
a = 20;
cout<<"*p = "<<*p_<<endl;
cout<<"**pp_ = "<<**pp_<<endl;
//对指针指向的数据赋值
*p_test = 30;
cout<<"*p_test = "<<*p_test<<endl;
}
};
int main(int argc, char* argv[])
{
derived d1;
d1.out();
const derived d2;
//const的对象,只会调用const函数。
d2.out();
return 0;
}