zoukankan      html  css  js  c++  java
  • 面向对象-数据保护与共享-常模块

    有空会把笔记整理下的

    #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
    构造函数
    常函数
    构造函数
    普通函数
    析构函数
    析构函数
    析构函数
    */
    
    
  • 相关阅读:
    case when if
    存储过程 、函数和事务
    poj 2263
    hdu -1874
    poj 2472
    2544 hdu
    模板floyed
    模板Dijkstra
    hdu 2066
    hdu 2544
  • 原文地址:https://www.cnblogs.com/OvOq/p/14853156.html
Copyright © 2011-2022 走看看