diff --git "a/2016/12/05/QT-QML\344\270\216C++\344\272\244\344\272\222/index.html" "b/2016/12/05/QT-QML\344\270\216C++\344\272\244\344\272\222/index.html" index eac74da..3f600b9 100644 --- "a/2016/12/05/QT-QML\344\270\216C++\344\272\244\344\272\222/index.html" +++ "b/2016/12/05/QT-QML\344\270\216C++\344\272\244\344\272\222/index.html" @@ -391,15 +391,15 @@
传统的C++枚举提供了一种创建名称常量的方式; 但如果在同一个作用域内定义两个枚举,则他们不能重名;C++11新增了一种枚举解决了这些问题,这种枚举使用class或struct定义:
对于内置数组以及包含方法begin()和end(0的类,可以使用基于范围的for循环来简化编程工作;
x将以此为prices中1的每个元素的值,x的类型应与数组元素的类型匹配; 吐过想修改数组或容器里的元素可以使用引用:
假设要使用某个默认的函数,而这个函数由于某种原因没有自动创建,例如提供了移动构造函数,则编译器不会自动创建默认的构造函数,复制构造函数和复值构造函数.在这情况下使用default显示的声明这些方法的默认版本:
关键字delet可以禁止编译器使用特定方法,且适用于任何函数,例如,要禁止复制构造函数可以:
class A
{
int a;
public:
A(int i = 0) : a(i){}
virtual void f(char ch) const {…};
}
class B
{
public:
B(int i = 0) : a(i){}
virtual void f(char ch) const {…};
}
```
由于B定义的是f(charch)而不是f(char ch); 这导致了程序不能使用: bingo(10); b.f('@')
类似这样的代码;
所以我们可以使用override,把它放在f(char * ch) 后面.如果与基类方法不匹配则将视为错误;
而final解决了另一个问题.可能想禁止派生类覆盖特定的虚方法,谓词可在参数后面加上final;例如,下面的代码禁止A的派生类重新定义f().virtual void f(char ch) const final{...};
传统的C++枚举提供了一种创建名称常量的方式; 但如果在同一个作用域内定义两个枚举,则他们不能重名;C++11新增了一种枚举解决了这些问题,这种枚举使用class或struct定义:
对于内置数组以及包含方法begin()和end(0的类,可以使用基于范围的for循环来简化编程工作;
x将以此为prices中1的每个元素的值,x的类型应与数组元素的类型匹配; 吐过想修改数组或容器里的元素可以使用引用:
假设要使用某个默认的函数,而这个函数由于某种原因没有自动创建,例如提供了移动构造函数,则编译器不会自动创建默认的构造函数,复制构造函数和复值构造函数.在这情况下使用default显示的声明这些方法的默认版本:
关键字delet可以禁止编译器使用特定方法,且适用于任何函数,例如,要禁止复制构造函数可以:
class A
{
int a;
public:
A(int i = 0) : a(i){}
virtual void f(char ch) const {…};
}
class B
{
public:
B(int i = 0) : a(i){}
virtual void f(char ch) const {…};
}
```
由于B定义的是f(charch)而不是f(char ch); 这导致了程序不能使用: bingo(10); b.f('@')
类似这样的代码;
所以我们可以使用override,把它放在f(char * ch) 后面.如果与基类方法不匹配则将视为错误;
而final解决了另一个问题.可能想禁止派生类覆盖特定的虚方法,谓词可在参数后面加上final;例如,下面的代码禁止A的派生类重新定义f().virtual void f(char ch) const final{...};