关闭

大话C++——默认参数及其所引起的二义性

发表于:2012-8-02 09:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:wudemiao1246403394    来源:51Testing软件测试网采编

  先来了解默认参数是什么吧!

  默认参数是指在定义或声明函数时,为参数指定默认值,在调用函数时,可以传递参数,也可以不传递参数;如果没有传递参数,则在函数中使用默认参数的默认值!

  对于默认参数不要单纯的错误的理解为就是函数的参数带有一个默认值,其实他强调的不仅是参数的默认的值还有如果没有传递参数可以使用默认的参数;也就是说你调用函数时可以不带参数,却仍然能正常运行(这是用的就是默认参数的默认值);因为编译器会自动调用默认参数。

  最典型的就是在带默认参数的构造函数:

  比如说你定义了一个class A;A有两个private数据成员int a;和int b;如果不是用默认的构造函数的话代码如下:

A();           //不带参数的构造函数
A(inta,int b);//带参数的构造函数

  如果你在新建对象时,如初始化

A a1;         //初始化调用A();
A a2(3,4);    //赋值调用A(int a,int b);

  而如果使用带默认参数的构造函数时就不需要不带参数的构造函数了;如下:

A(int a=0,int b=0);

  则不需要在写出不带参数的构造函数了;因为你如果这样定义对象:

A a1;           //调用的还是A(inta=0,int b=0)因为编译器就不再产生默认的构造函数A();而是直接调用A(int a=0,int b=0)
                //因为没有实参的构造函数,是默认构造函数,参数指定了默认值的构造函数也是默认构造函数,一个类只能有一个默认构造函数

  这里要说明的是一个类在写了默认构造函数之后就不会自动生成默认的构造函数,如果你写的是带默认参数的构造函数,则其实已经有了默认构造函数,如果在定义一个就会出现在A()就会出错了!看看下面的代码吧!

  例如:

#include<iostream>
#include<string>
using namespace std;
class A
{
public:
    A()
    A(){data2=0;data2=0;}
    A(int a=0,int b=0){data1=a;data2=b;}
    void display();
private:
    int data1;
    int data2;
};
void A::display()
{
    cout<<data1<<endl;
    cout<<data2<<endl;
}
void main()
{
    A a1;
    A a2(1,2);
    a1.display();
    a2.display();
}

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号