类的构造函数、析构函数的不常用类型


      一般情况,我们只会使用到public类型的构造函数和析构函数。这里我收集列举了protected和private的构造函数和析构函数的实例,

虽然现实中很少用到,但是对于构造函数和析构函数的可见性问题还是有很大帮助。

 

1  protected 类型

    1>构造函数

   class A

    {


      protected: A();

      public:

      int a;

     }


   class B : public A

    {

       public: B(){}

    };

 
     A a; // Error 1 error C2248: 'A::A' : cannot access protected member declared in class 'A'
     B b; // ok

  


  

    2>析构函数

    class A 
    {


       public:

               A()

                {

                   a = 1;

                }


        protected:

               ~A()

               {

               }


        public:
                int a;

    };

     class B : public A

     {

          public: B(){}

      };

     

     A a; //Error 1 error C2248: 'A::~A' : cannot access protected member declared in class 'A'
     B b; // ok

 

 


2  private 类型的构造函数和析构函数

    class A

   {
         private:
         A():data(10){ cout << "A" << endl; }
         ~A(){ cout << "~A" << endl; }

         public:
         static A& Instance()
         {
              static A a;
              return a;
         }

         void Print()
         {
            cout << data << endl;
         }

         private:
               int data;
   };

   A& ra = A::Instance();
   ra.Print();

 

      
      今天无意中突然想起,c++中析构函数的可见度的问题。平时,我们一般都是将析构函数设置为public类型,这样其它任意位置都可以由编译器来调用析构函数释放掉此类实例的资源。那么析构函数是否能设置为protected或是private呢?按道理来说,是可以的,只是没觉得protected和private这两种类型的析构函数没什么用武之地。构造函数的用法就同析构函数啦。

      然后在baidu了下,发现竟然真有牛人写出了这两种析构函数的实际应用。经过测试,发现确实与程序设计使用初衷相符。析构函数能用到这种地步也确实叹为观止了,不得不佩服人的想象力啊!呵呵

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值