C++11新增类功能:default、delete、委托构造函数、继承构造函数、override与final

1、调用默认方法与禁用方法
default:生成指定构造函数
C++11新增类功能:default、delete、委托构造函数、继承构造函数、override与final_第1张图片
delete:禁止编译器使用特定的方法

Class A{
private:
	A& operator=(const A&);
public:
	A();
	A(const A&) = delete;
};

利用delete禁止使用特定方法与将其设为私有函数不允许调用有一样的效果。

2、委托构造函数
减少编写重复代码,利用已有构造函数完成构造工作。
C++11新增类功能:default、delete、委托构造函数、继承构造函数、override与final_第2张图片

3、继承构造函数:
为了简化编码工作,C++11提供了派生类继承基类构造函数的机制using A::A;。

//.h
Class A{
	int x1;
	double y1;
public:
	A():x1(1),y1(0.2){}
	A(int a,double b):x1(a),y1(b){}
};
Class B:public A{
	int x2;
	double y2;
public:
	using A::A; 
	B():x2(1),y2(0.2){}
	B(double c):x2(2),y2(c){}
};

//.cpp
B b(2,0.2); //调用A(int a, double b);

由于B中没有构造函数B(int a, double b),因此采用继承而来的A(int a, double b)

4、管理虚方法的两个标识符:override与final
override:

Class A{
	int a;
public:
	virtual output(int a){cout<<a<<endl;}
};
Class B{
public:
	virtual output(int* a){cout<<a<<endl;}
};

派生类特征标与基类不匹配,因此将隐藏基类方法,而不是覆盖
C++11中,可使用虚说明符override指出要覆盖一个虚函数:将其放在参数列表后面,若声明与基类方法不匹配,编译器发出错误消息。

virtual output(int* a) override {cout<<a<<endl;}

final:
禁止派生类覆盖特定的虚方法,可在基类方法参数列表后加上final。

Class A{
	int a;
public:
	virtual output(int a) final {cout<<a<<endl;}
};

参考资料:C++ Primer Plus 18.3节
总结

1、使用default与delete,让编译器生成或禁止使用特定的构造函数。
2、为减少编写重复代码,使用委托构造函数用已有构造函数完成构造工作。
3、为了简化编码工作,C++11提供了派生类继承基类构造函数的机制using A::A;。
4、使用虚说明符override指出要覆盖一个虚函数;使用虚说明符final禁止派生类覆盖基类特定的虚方法。

你可能感兴趣的:(C++,Primer,plus笔记)