C++之构造函数默认值设置方式

 更新时间:2023年08月09日 10:09:00   作者:ClassRoom706  
这篇文章主要介绍了C++之构造函数默认值设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

C++构造函数默认值设置

构造函数默认值

C++类中构造函数设置默认值应当注意:

  • C++类构造函数只能对排在最后的参数提供默认值;
  • 既可以在构造函数的声明中,也可以在构造函数的实现中,提供缺省值,但,不能在两者同时提供缺省默认值。

代码:

#include <iostream>
using namespace std;
class CTest
{
public:    
    CTest();
    CTest(int _a, double _b, const bool _c = false, bool _d = true);
private:
    const bool c;
    bool d;
    int a;
    double b; 
};
CTest::CTest(int _a, double _b = 1.0, const bool _c,  bool _d):a(_a), b(_b), c(_c), d(_d)
{
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    cout << d << endl;  
}
int main()
{
    // CTest* test = new CTest(1, 1.0, true, false);
    // CTest* test = new CTest(1, 1.0, true);
    //CTest* test = new CTest(1, 1.0);
    CTest* test = new CTest(1);
    return 0;
}

C++构造函数默认参数使用

一 代码

#include <iostream>
using namespace std;
class Box{
public:
    Box(int h=2,int w=2,int l=2);//在声明构造函数时指定默认参数
    int volume();
private:
    int height,width,length;
};
Box::Box(int h,int w,int len){//在定义函数时可以不指定默认参数
    height=h;
    width=w;
    length=len;
}
int Box::volume(){
    return height*width*length;
}
int main(){
    Box box1(1);//不指定第2、3个实参
    cout<<"box1's volume: "<<box1.volume()<<endl;
    Box box2(1,3);// 不指定第3个实参
    cout<<"box2's volume: "<<box2.volume()<<endl;
    Box box3;
    cout<<"box3's volume:"<<box3.volume()<<endl;
    return 0;
}

二 运行

[root@localhost charpter02]# ./0210
box1's volume: 4
box2's volume: 6
box3's volume:8

三 说明

该实战中,定义了一个带默认参数的构造函数,是在声明时指定默认参数,而定义时则可以不指定默认参数。定义对象时,可以传0~3个参数,传了几个参数,就替换前面的几个参数,其余都使用默认参数。

使用默认参数的好处在于:调用构造函数时就算没有提供参数也不会出错,且对每一个对象能有相同的初始化状态。

不过,应该在声明构造函数默认值时指定默认参数值,而不能只在定义构造函数时指定默认参数值。如果构造函数中的参数全指定了默认值,则在定义对象时,可给一个实参或多个实参,也可不给实参。

一个类中如果定义了全是默认参数的构造函数后,就不能再定义重载构造函数了。

假设Box类中定义了3个构造函数

Box(int =10,int=3,int=5);
Box();
Box(int,int);

若有以下定义语句,则会出现问题

Box box1;              //是应该调用第1个构造函数还是应该调用第2个构造函数
Box box2(13,18);        //是应该调用第2个构造函数还是应该调用第3个构造函数

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C语言用递归函数对素数进行判断流程

    C语言用递归函数对素数进行判断流程

    素数判断是编程语言学习过程中一个老生常谈的话题,而它的实现也有多种算法,包括经典的试除法(以及试除法的几种优化),进阶的素数表筛选法,埃拉托斯特尼筛法和欧拉筛法(以及它们的优化)等。对以上算法感兴趣的朋友们,不妨搜索“素数判断的N种境界”来学习了解
    2022-09-09
  • MongoDB C 驱动程序安装(libmongoc) 和 BSON 库(libbson)方法

    MongoDB C 驱动程序安装(libmongoc) 和 BSON 库(libbson)方法

    这篇文章主要介绍了安装 MongoDB C 驱动程序 (libmongoc) 和 BSON 库 (libbson),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • C语言实现 数据类型占多少字节指针占多少字节

    C语言实现 数据类型占多少字节指针占多少字节

    这篇文章主要介绍了 C语言 数据类型占多少字节指针占多少字节的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • C语言通过深度优先搜索来解电梯问题和N皇后问题的示例

    C语言通过深度优先搜索来解电梯问题和N皇后问题的示例

    深度优先搜索即是对一个新发现的节点上如果还关联未探测到的边,就沿此边探测下去,直到发现从原点可达的所有点为止,这里我们就来展示C语言通过深度优先搜索来解电梯问题和N皇后问题的示例
    2016-06-06
  • 关于C++中数据16进制输出的方法

    关于C++中数据16进制输出的方法

    本文主要介绍了关于C++中数据16进制输出的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • C++控制台实现密码管理系统

    C++控制台实现密码管理系统

    这篇文章主要为大家详细介绍了C++控制台实现密码管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Visual C++中MFC消息的分类

    Visual C++中MFC消息的分类

    标准(窗口)消息:窗口消息一般与窗口内部运作有关,如创建窗口,绘制窗口,销毁窗口,通常,消息是从系统发到窗口,或从窗口发到系统
    2012-11-11
  • Qt音视频开发之利用ffmpeg实现倍速播放

    Qt音视频开发之利用ffmpeg实现倍速播放

    这篇文章主要为大家详细介绍了在Qt音视频开发中如何利用ffmpeg实现倍速播放功能(半倍速/2倍速/4倍速/8倍速),感兴趣的小伙伴可以了解一下
    2022-11-11
  • C语言实现输入两个数字将其按从小到大输出的方法

    C语言实现输入两个数字将其按从小到大输出的方法

    这篇文章主要介绍了C语言实现输入两个数字将其按从小到大输出的方法,本文通过代码讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • C语言如何求整数的位数及各位数字之和

    C语言如何求整数的位数及各位数字之和

    这篇文章主要介绍了C语言如何求整数的位数及各位数字之和,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11

最新评论