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

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

默认构造函数分为两种:

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. fiddler笔记:Find Session窗口

    通过Edit菜单选项或CTRL+F打开Find Session窗口.其主要是用来搜索捕捉到的请求和响应. find 指定要搜索的文本 Options Search 支持的搜索选项:Requests a ...

  2. python — 表的操作(一)

    1. 创建表 创建表: create table t1 (id int,name char(4)); create table t2 (id int,name char(4)) engine=myis ...

  3. k8s-traefik默认80端口

    vim traefik.yaml kind: Deployment apiVersion: extensions/v1beta1 metadata: name: traefik-ingress-con ...

  4. 怎样理解在函数中声明var x = y = 1后调用函数时, x是局部变量, y是全局变量

    下面这段代码在执行的时候, 打印的结果是1, Error: undefined; function fn() { var x = y = 1; } fn(); console.log(y); // 1 ...

  5. 怎样理解undefined和 null

    前言: undefined表示 "未定义", null 表示 "空" 第一步: 一般在变量或属性没有声明或者声明以后没有赋值时, 这个变量的值就是undefin ...

  6. cas sso 整合记录

    首先说明下,我使用的cas-server版本是4.2.1 整合过程中遇到的问题及解决方式如下 1.因为使用https的话证书是个麻烦事,所以启用http 修改cas-server-webapp下的ca ...

  7. Redis 的订阅发布(PUB/SUB)示例

    ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("127.0.0.1"); ISubscriber sub ...

  8. SqlServer学习之触发器

    什么是触发器? 根据百度百科的解释,触发器是SqlServer提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,他的执行不是有程序调用,也不是手工启动,而是由事件来 ...

  9. WindowsAPI操作串口

    #include <windows.h> #include <stdio.h> int main() { //1.打开串口 HANDLE hCom; hCom = Create ...

  10. GC原理图

    GC原理图,Jdk1.6及以下版本 永久代 永久代是Hotspot虚拟机特有的概念,是方法区的一种实现,别的JVM都没有这个东西.在Java 8中,永久代被彻底移除,取而代之的是另一块与堆不相连的本地 ...