现在的位置: 首页 > 综合 > 正文

关于只读成员函数

2016年02月04日 ⁄ 综合 ⁄ 共 1474字 ⁄ 字号 评论关闭
// Contest_Test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>

using namespace std;
class CTest
{
	int m_nCount;
	int m_nIndex;
	static int m_nSta;
public:	
	static const int m_nStatic;
	//const static int m_nNum = 0; 在DEV-C++当中可以运行通过,这里报错

public:
	CTest()//:m_nStatic(0) 不能在这里初始化
	{
		m_nIndex = 0;
		m_nCount = 0;
		//m_nStatic = 0; ERROR
	}

	CTest(int i, int j)
	{
		m_nIndex = j;
		m_nCount = i;

	}
	int GetCount()const
	{
		//m_nCount = 0;只读成员函数不能修改本类内的非静态成员变量
		m_nSta = 88;
		return m_nCount;
	}
	int GetCount()
	{
		return m_nCount;
	}
	int GetIndex()
	{
		return m_nIndex; //这里可有修改非静态成员变量
	}
	void GetSta() const
	{
		cout<<m_nSta<<endl; //普通成员函数可以访问静态成员变量
	}
	int GetStatic() const
	{
		return m_nStatic;
	}
};
int CTest::m_nSta = 9;
const int CTest::m_nStatic = 8;

int main(int argc, char* argv[])
{
	CTest t;
	CTest t1(2,3);
	t.GetCount();  //当既有const成员函数又有普通成员函数,类对象是普通对象,优先调用普通成员函数
	t1.GetCount();
	t.GetIndex();
	t1.GetIndex();
//	cout<<t1.GetSta()<<endl;

	const CTest t2;
	t2.GetCount();//t2为const对象,那么只能调用const成员函数
	t2.GetSta();
	//t2.GetIndex();//const对象不能调用普通成员函数


	cout<<&CTest::m_nStatic<<endl;
	cout<<&t.m_nStatic<<endl;
	cout<<&t1.m_nStatic<<endl;
	cout<<&t2.m_nStatic<<endl;

	cout<<"CTest类对象的大小:"<<sizeof(CTest)<<endl; //输出为8  说明static const int 变量也不是属于类

	return 0;
}

 

1、只读成员函数:未经const限制的成员函数是普通成员函数。
a)只读成员函数是const置于成员函数右括号之后修饰的成员函数;
b)const成员函数不修改成员变量的数据。
即:成员函数中出现的成员变量仅可以作为右值,不可以做左值;
c) 没有只读的构造函数和析构函数:因为构造函数和析构函数本身就是要对成员操作的;
d)要对成员数据进行设置(Set...类)的函数,不能使用const只读函数;
e)返回值是引用类型的时候,返回的变量是本类的成员时,也不能使用const只读函数;
f)当两个版本并存时,对象优先调用普通的成员函数,
只读的成员函数仅仅用于只读对象(或只读的对象引用)仅仅调用;
e)对象调用只读成员函数时,关键字const本质上约束this形参为只读属性.

 

注意标红的那句,一般不会注意到这个;

抱歉!评论已关闭.