在一个类中 ,如果程序员没有写,任何一个构造函数,则编译器将为该类提供一个默认的构造函数,如果程序员对类的构造函数进行了重载,则编译器将不提供默构造函数,这里需要手动书写一个无参的构造函数,

无参的构造函数,也就是默认构造函数,

默认构造函数分为两种:

1、不含有参数的默认构造函数

2、带有默认参数值的构造函数

在这里主要说的是带有默认参数值的构造函数的使用及注意事项:

定义方法示例:

class Circle{

public:

Circle(int a=1,int b=2,int c=3){//本构造函数是带默认值的默认构造函数

x=a;

y=b;

z=c;

}

private:

int x;

int y;

int z;

};

一个类中,一旦定义了带有默认值的构造函数,便可以直接使用,使用方式主要有以下几种:

在这里仍使用上面的例子,进行演示:

Circle c1;//调用默认构造函数,此时,类中的私有属性,分别初始化为x=1、y=2、z=3;

Circle c2(5);//调用默认构造函数,此时,类中私有属性,分别初始化为x=5、y=2、z=3;

Circle c2(5,6);//调用默认构造函数,此时,类中私有属性,分别初始化为x=5、y=6、z=3;

Circle c2(5,6,7);//调用默认构造函数,此时,类中私有属性,分别初始化为x=5、y=6、z=7;

当函数中定义了带有默认值的构造函数,在进行构造函数重载时,就不能任意的进行重载,即其它构造函数的参数,与之对用的位置,不能与带有默认值的构造函数相同。如果不明白,可以看下面这个例子:

class Circle{

public:

Circle(int a=1,int b=2,int c=3){//本函数是带默认值的默认构造函数

x=a;

y=b;

z=c;

}

//    Circle(int a){//此种定义,会导致,构造函数 在调用时,编译器不知该如何调用哪个构造函数,由于带有默认参数值的默认构造函数的出现

//        x=a;

//        y=4;

//        z=5;

//    }

//    Circle(float a){//此种定义,会导致,构造函数 在调用时,编译器不知该如何调用哪个构造函数,由于带有默认参数值的默认构造函数的出现

//        x=(int)a;

//        y=4;

//        z=5;

//    }

public:

void print(){

std::cout<<"x="<<x<<"y="<<y<<"z="<<z<<endl;

}

private:

int x;

int y;

int z;

};

因此,当进行构造函数重载时,要特别注意。

C++之带有默认参数值的构造函数的更多相关文章

  1. 2.9 C++使用默认参数的构造函数

    总结: 默认参数的构造函数,其默认参数必须置于参数列表的结尾. 设计类的构造函数的时候最好不要同时是用构造函数的重载和带参数的构造函数. 我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常 ...

  2. C++使用默认参数的构造函数

    我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常老的书,为了尽快清空库存,店主想了一下,决定开展一个大甩卖活动,所有的这些书全部以五美元的价格出售.此时如果需要尽快将这些书的信息录入到书 ...

  3. C++——带默认参数值的函数

    函数在声明时可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先给出的默认参数值. ,) { return x + y;} int main() { add(,);//10+20 a ...

  4. C++坑点集合 - 1 隐式调用和默认实现的构造函数的坑

    C++是一个编译器会替你在背后做很多事情的语言,包括模板实例化,按需要创造隐式的构造函数,默认构造你没有显式构造的成员,按需进行隐式转换和饮食构造等等,如果没有彻底了解清楚,就容易被这些编译器背后做好 ...

  5. C++默认参数值函数

    1.默认参数值的函数 C++语言允许在定义函数时给其中或某些形式参数(形参)指定默认值,方法就是在相应的形参后面写上“=默认值”,如果省略了对应位置上的实参的值,则在执行被调函数时以该形参的默认值进行 ...

  6. 读书笔记 effective c++ Item 37 永远不要重新定义继承而来的函数默认参数值

    从一开始就让我们简化这次的讨论.你有两类你能够继承的函数:虚函数和非虚函数.然而,重新定义一个非虚函数总是错误的(Item 36),所以我们可以安全的把这个条款的讨论限定在继承带默认参数值的虚函数上. ...

  7. python函数参数中带有默认参数list的坑

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 def f(x,l=[]): for i in range(x): l.append(i*i) print(l) print( ...

  8. python函数把可变数据类型当默认参数值的问题(转)

    add by zhj: 文章写的很好,其实只要默认参数在函数中只读不写,那默认值就不会被修改,可变类型做默认参数就不会有问题 方法二中,当result is None时,修改result的指向,不再指 ...

  9. (转)python中函数参数中如果带有默认参数list的特殊情况

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]):     for i in range(x):         ...

随机推荐

  1. Dom4j 生成xml并格式化

    Document document = DocumentHelper.createDocument(); //创建root         Element root = document.addEle ...

  2. ACM-ICPC 2018 徐州赛区网络预赛 I. query 树状数组

    I. query 题目链接: Problem Description Given a permutation \(p\) of length \(n\), you are asked to answe ...

  3. Two progressions(CodeForces-125D)【鸽巢原理】

    题意:将一列数划分为两个等差数列. 思路:首先,我要吹爆鸽巢原理!!!真的很强大的东西!!! 加入能完成题设操作,则前三个数中,必有至少两个数在同一序列,枚举三种情况(a1 a2,a2 a3,a1 a ...

  4. [python]近日 用3种库 实现简单的窗口 的回顾~

    最近任务:利用python 实现以下4个窗口弹窗. 信息提示框 文本输入框(需在窗口消失后,返回 用户输入的值) 文件选择(需在窗口消失后, 返回 用户选择的文件名的全路径) 文件夹选择(需在窗口消失 ...

  5. MyBatis 源码篇-日志模块1

    在 Java 开发中常用的日志框架有 Log4j.Log4j2.Apache Common Log.java.util.logging.slf4j 等,这些日志框架对外提供的接口各不相同.本章详细描述 ...

  6. IOC+EF+Core搭建项目框架(三)

    /// <summary> /// 表示类别映射配置 /// </summary> public partial class sys_UserMap : NopEntityTy ...

  7. 某康x电视去广告

    开启adb 信源选择进入模拟电视 然后按菜单键输入2008 找到其他选项,进去把adb root打开 删除对应广告视频(短暂方法) 可以下载tvbox,利用文件管理功能 进入/data/misc/ko ...

  8. Windows 下 nvm, node, npm 的下载、安装与配置

    主要解决的问题 下载安装完 nvm 和 node 后,缺失 npm 文件 执行 jasmine 等命令时提示「不是内部或外部命令...」及全局变量的设置 下载与安装 一.nvm github 下载地址 ...

  9. HTML给标题栏添加图标

    <link rel="icon" href="images/logo.icon" type="image/x-icon"> 也可 ...

  10. ember server禁用Livereload server on http://localhost:49152

    ember server --live-reload=false