关于只读成员函数

来源:互联网 发布:带函数冒泡排序c语言 编辑:程序博客网 时间:2024/05/22 15:28
// 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形参为只读属性.

 

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

0 0
原创粉丝点击