C++ 中的默认构造函数和 default 关键字
本文讨论 C++ 中的默认构造函数以及新引入的关键字 default。
首先,让我们了解一下C++中的默认构造函数。 默认构造函数是一种特殊的构造函数,它没有参数,用于为类的数据成员设置默认值。
例子:
class demo
{
int age;
int id;
public:
demo()
{
age = 10;
id = 1;
}
};
C++ 中的 Default 关键字和默认函数
C++ 11 版本引入了一种新形式的函数声明方式,可以借助 =default
说明符显式声明默认函数。 我们可以通过在函数声明末尾附加 this 来显式声明默认函数。
使函数显式默认具有优点,因为它强制编译器生成默认实现。 而且就效率而言,它们比手动实现的功能要好。
例如,在类中创建参数化构造函数时,编译器不会在程序中创建或添加默认构造函数。 在这些情况下,我们可以使用 =default
创建默认构造函数。
示例代码:
#include <bits/stdc++.h>
using namespace std;
class demo {
public:
int x;
demo(int temp) //parameterized constructor
{
x = temp;
}
demo() = default;
};
int main()
{
demo d; //uses default constructor
demo d2(200); //uses parameterized constructor
}
我们可以看到,在参数化构造函数之后,我们使用了 =default
说明符来强制编译器创建构造函数的默认版本。 我们可以观察到,当使用 =default
时,我们不必指定构造函数的主体。
使用 =default
而不是使用函数的 {}
(空主体)的另一个原因是它增强了代码的可读性。
处理 =default
说明符时,一条规则是函数不应有默认参数。 只有特殊的成员函数(例如默认构造函数、复制构造函数或析构函数)可以被默认。
示例代码:
#include <bits/stdc++.h>
using namespace std;
class demo {
public:
int add() = default;
demo(float , float ) = default;
demo(int = 0) = default;
};
int main()
{
demo d2(200,300); //uses parameterized constructor
}
输出:
[Error] 'int demo::add()' cannot be defaulted
[Error] 'demo::demo(float, float)' cannot be defaulted
[Error] 'demo::demo(int)' cannot be defaulted
上述原因不起作用,因为第一个函数和第二个函数 add()
和 demo(float,float)
不是特殊的成员函数,而第三个函数 demo(int = 0)
有一些默认参数。 所以这些函数不能使用 =default; 默认值 因此我们得到编译错误。
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
相关文章
Arduino 复位
发布时间:2024/03/13 浏览次数:315 分类:C++
-
可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。
Arduino 的字符转换为整型
发布时间:2024/03/13 浏览次数:181 分类:C++
-
可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。
Arduino 串口打印多个变量
发布时间:2024/03/13 浏览次数:381 分类:C++
-
可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。