1. 程式人生 > >C++11特性--新的類功能--特殊的成員函式(移動建構函式,移動賦值運算子),預設方法和禁用方法(default,delete),委託建構函式,管理虛方法(override,final)

C++11特性--新的類功能--特殊的成員函式(移動建構函式,移動賦值運算子),預設方法和禁用方法(default,delete),委託建構函式,管理虛方法(override,final)

      class A
     {
        public:
           void fun(int x )
           {
              cout<<x<<endl;
            }
           
           void fun(double x) = delete;
//禁止double型別的轉換
      };


     int main()
     {
       A a;
       a.fun(1);//1 ok
//a.fun(1.1);//error, use of deleted function 'void A::fun(double)'


       return 0;
      }


   (4)委託建構函式
      C++11允許在一個建構函式的定義中使用另一個建構函式,這被稱為委託。
      Example:
      class A
      {
        private:
           int x;
           int y;
           int z;
        public:
           A(int i,int j,int k):x(i),y(j),z(k){ }
           A(int i,int j):A(i,j,0){  }
           A(int i):A(i,0,0){ }
           A():A(0,0,0){ }
           void fun()
           {
              cout<<x<<ends<<y<<ends<<z<<ends;
           }
        };


       int main()
       {
          A a;
          a.fun();
//0 0 0
          cout<<endl;

          A b(1);
          b.fun();//1 0 0
          cout<<endl;

          A c(1,2);
          c.fun();//1 2 0
          cout<<endl;

          A d(1, 2, 3);
          d.fun();//1 2 3

          return 0;
       }
   
   (5)管理虛方法:override和final
      *使用虛說明符override指出要覆蓋的函式:將其放在引數類別後面。如果與基類方法不匹配,編譯器將視為錯誤
       class base

      {
         public:
           virtual void fun()
           {
              cout<<"base::fun()"<<endl;
           }
      };


 class derived:public base
 {
public:
virtual void fun() override
{
cout<<"derived::fun()"<<endl;
}
 };


  int main()
  {
derived d;
d.fun();

return 0;
  }

  output:
derived::fun()


   *final:禁止派生類覆蓋特定的虛方法
   Example:
     class A
 {
 public:
  virtual void fun()
  {
  cout<<"A::fun()"<<endl;
  }
 };
 
 class B:public A
 {
 public:
  virtual void fun() override final
// 禁止B的派生類覆蓋特此虛方法 
  {
  cout<<"B::fun()"<<endl;
  }
 }; 
 
  class C:public B
 {
 public:
 virtual void fun() override  
// error, overriding final function 'virtual void B::fun()'
 {
cout<<"C::fun()"<<endl;
 }
 };