您的位置:首页 > 编程语言 > C语言/C++

[C++_4]static_const_mutable

2014-03-01 10:22 459 查看

7 静态成员变量,函数

静态成员不属于某个对象,只是属于一个类,也不能被this调用;

适用于:变量,方法被某一类通用,而不是单个对象。例如静态变量作类实例计数器,工具类  

8 类方法const

const void print(bool newline=true);  //返回值是只读的

 

void print(bool newline=true)const;  //常成员函数, Const成员函数不能改变对象的成员函数

 

成员函数中,末尾有无const也构成重载。如果两个函数一样,一个是const另一个是自由的,编译器会优先考虑自由的

如果对象一开始被定义是const的,就会优先调用const的,比如

 

9 mutable

在c++的类中,如果一个函数被const修饰,那么它将无法修改其成员变量的,但是如果这个成员变量是被mutable修饰的话,则可以修改。

#include<iostream>
using namespace std;

class Ctest
{

mutable int cnt;//计数show()的次数
//public:
static int Ccnt; //计数类实例的个数:私有静态成员
public:
Ctest();
static void showCcnt();
void showcnt()const;
void show()const;
void show();
};

int Ctest::Ccnt = 0; //静态变量初始化必须放在类外面

Ctest::Ctest()
{
cnt = 0;
Ccnt++;
}

void Ctest::show()const  //不可修改对象,但由于mutable去除限制
{
cnt++;
cout << "const函数调用!" << endl;
}

void Ctest::show()
{
cnt++;
cout << "非const函数调用!" << endl;
}

void Ctest::showcnt()const
{
cout << this->cnt << endl;
}

void Ctest::showCcnt() //静态函数的定义与普通函数一样
{
cout << Ctest::Ccnt << endl;
}

int main()
{
const Ctest A;
Ctest B;
cout << "调用const A的show函数:" << endl;
A.show();
A.show();
cout << "调用非const B的show函数:" << endl;
B.show();
cout << "A中调用show的次数:" << endl;
A.showcnt();
cout << "B中调用show的次数:" << endl;
B.showcnt();
cout << "类实例个数:" << endl;
Ctest::showCcnt();
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  static const mutable