大话C++??默认参数及其所引起的二义性
作者:网络转载 发布时间:[ 2012/8/2 10:38:02 ] 推荐标签:
#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();
}
编译后会出现错误是(用的VS2010)
C++1>f:面向对象miao_9miao_912.cpp(8): error C2535: “A::A(void)”: 已经定义或声明成员函数
1> f:面向对象miao_9miao_912.cpp(7) : 参见“A::A”的声明
1>f:面向对象miao_9miao_912.cpp(14): warning C4520: “A”: 指定了多个默认构造函数
1>f:面向对象miao_9miao_912.cpp(22): error C2668: “A::A”: 对重载函数的调用不明确
1> f:面向对象miao_9miao_912.cpp(9): 可能是“A::A(int,int)”
1> f:面向对象miao_9miao_912.cpp(7): 或 “A::A(void)”
现在解释下上面的错误出现的原因吧:首先要说的是“指定了多个默认构造函数”
A()
A(){data2=0;data2=0;}
如上所说的这两个都是默认构造函数,而一个类只能调用一个默认构造函数(一定要注意带默认参数的构造函数也是默认构造函数!)
在是
对重载函数的调用不明确
也是所说的二义性啊,因为编译器不知道调用哪个默认的构造函数啊!
A a1;
创建这个对象时调用默认构造函数时,两个默认构造函数都符合,所以编译器不知道调用哪个!只需要把A()删掉那么两个问题都解决了。
现在在举个函数重载时二义性例子:
#include<iostream>
using namespace std;
int max(int a,int b);
int max(int a=0,int b=0,int c=0); //函数重载
void main()
{
inta=2;
intb=3;
cout<<max(a,b)<<endl;
}
int max(int a,int b)
{
if(a>b)
returna;
else
returnb;
}
编译后报错如下(VS2010):
C++1> 正在创建“Debugmiao_12.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
1>ClCompile:
1> 2.cpp
1>f:面向对象miao_12miao_122.cpp(9): error C2668: “max”: 对重载函数的调用不明确
1> f:面向对象miao_12miao_122.cpp(4): 可能是“int max(int,int,int)”
1> f:面向对象miao_12miao_122.cpp(3): 或 “int max(int,int)”
1> f:visualstudiovcincludexutility(2078): 或 “const _Ty &std::max<int>(const _Ty&,const _Ty &)”
1> with
“函数重载调用不明确”也是在调用max(a,b)时两个
int max(int a,int b);
int max(int a=0,int b=0,int c=0); //函数重载
在语法上调用都是合法的,所以才会出现调用不明确啊,对于int max(int a,int b)无可非议,调用他是合法的。而对于int max(int a=0,int b=0,int c=0)也是符合语法的,这是C++的默认参数效果,因为C++对于使用默认参数的函数是不一定传递函数的参数,也是说参数是可以省略的!至于怎么改不在赘述了,,,,
说道这里,应该差不多了吧!呵呵,,还是那句老话,对于有不对之处,还望指出!
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11