首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

构造函数默认参数的有关问题

2012-03-17 
构造函数默认参数的问题#include iostreamusingnamespacestdclassSt{public:St(){a0b0.0out()}St(

构造函数默认参数的问题
#include <iostream>
using   namespace   std;
class   St
{
public:
St(){a=0;b=0.0;out();}

St(int   m=8,int   n)//这里为什么设置第一个m的默认值就会出现错误,设置第二个就不错,两个全部赋默认值和第一个构造函数有什么区别?
{a=m;b=n;out();}

void   out()
{cout < <a < <endl < <b < <endl;}

private:  
int   a,b;
};


St(int   m,int   n=8)     这样就是对的.

[解决办法]
因为在调用的时候,C++不支持VB那种可以空一个参数或者显示提供参数名的语法。
于是,如果你的有默认值的参数之后还有不带默认值的,那么这个默认参数一点意义也没有。
[解决办法]
St(int m=8,int n)
=================
默认参数只能的出现在参数右边
[解决办法]
你可以这么理解
void st(int m = 8, int n){};
使用st(0)的时候,编译器知道这个函数需几个参数,但这个8是0是哪一个的值呢
它可以认为是n的值,m用默认值8,也可以认为m的值用0,n的值未提供报err
所以
编译器对于默认参数一律认为靠右出现,这样就能够识别出什么是正确的调用,什么是不合适的
void st(int m, int n = 8){};
st(0)编译器给m值0,n使用默认值8
[解决办法]
是标准规定的

在默认参数后面的所有参数必须也是默认参数!!

原因么,
就是因为不这么做,
可能就歧义了 ~
[解决办法]
应该是编译器的原因吧
[解决办法]
这样容易观察哪个没有初始化

热点排行