有空会把笔记整理下的
#include<bits/stdc++.h>
using namespace std;
/*
出于数据保护与共享,出现了常模块。顾名思义,常模块就是构造后数据不允许变化的模块。
常数据成员
*/
class Clock{
private:
int h,m,s;
const int maxn=100;
///常数据成员:在对象构造后其值不会改变,所以必须在构造时对其进行初始化
///保护机制:任何的函数都无法修改其值
static int cnt;
///静态数据成员,为类共有,对象和类都具有访问权
public:
Clock(int hh,int mm,int ss):h(hh),m(mm),s(ss){///构造函数
cnt=cnt+1;
cout<<"构造函数"<<endl;
}
Clock(const Clock& c):h(c.h),m(c.m),s(c.s){///常引用
cnt=cnt+1;
///c.h=110;//不能通过引用的方式改变对象的值,但是原先的数据是可以改变的
}
Clock(Clock& c):h(c.h),m(c.m),s(c.s){///普通引用
cnt=cnt+1;
c.s=110;
///表明数据可以改变,只是不要能通过常引用改变
}
void fs()const{///常函数成员:不允许修改数据成员的一个函数成员
//cout<<h<<" "<<m<<" "<<s<endl;
}
static void shoucnt(){///静态函数成员
cout<<"cnt="<<cnt<<endl;
}
void showtime()const{///常函数
cout<<"常函数"<<endl;
fs();
}
void showtime(){
cout<<"普通函数"<<endl;///普通函数
}
~Clock(){///析构函数
cout<<"析构函数"<<endl;
cnt=cnt-1;
}
};
void showclock(const Clock& c){
cout<<"showclock begin"<<" "<<&c<<endl;
c.showtime();
cout<<"showclock end"<<" "<<endl;
}
int Clock::cnt=0;
int main(){
Clock::shoucnt();///cnt=0
Clock c(4,5,6);
c.shoucnt();///cnt=1说明有了一个对象c
{
Clock c2(3,5,8);
Clock::shoucnt();///cnt=2 说明比上面多了一个对象c2
}
Clock::shoucnt();///cnt=1说明c2的生存期只是大括号内,超出后就被析构
///常对象:一旦构造完成,该对象的所有数据成员,在生命期间不能被修改
///语法如下:
Clock const c1(7,8,9);
c1.showtime();///常对象只能调用常函数
Clock c11(7,9,8);
c11.showtime();///普通对象可以调用常函数,也能调用普通函数,后者优先
/**常对象的保护机制:
1.任何函数都无法修改其值
2.常对象调用函数成员时必须保证该函数没有修改常对象的值
**/
///由于保护机制,常对象不能调用普通函数
return 0;
}
/*
运行结果:
cnt=0
构造函数
cnt=1
构造函数
cnt=2
析构函数
cnt=1
构造函数
常函数
构造函数
普通函数
析构函数
析构函数
析构函数
*/