有空会把笔记整理下的
#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 构造函数 常函数 构造函数 普通函数 析构函数 析构函数 析构函数 */