C++11特性--新的類功能--特殊的成員函式(移動建構函式,移動賦值運算子),預設方法和禁用方法(default,delete),委託建構函式,管理虛方法(override,final)
阿新 • • 發佈:2019-01-26
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;
}
};
{
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();
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;
}
};