C++ 默认参数 问题
classtc{private:inta;public:voidf(int&i=a){i+=1;}}w;这个东西通不过编译。我想把a作为f的默认形参。...
class tc
{
private:
int a;
public:
void f(int &i=a)
{
i+=1;
}
}w;
这个东西通不过编译。我想把a作为f的默认形参。 展开
{
private:
int a;
public:
void f(int &i=a)
{
i+=1;
}
}w;
这个东西通不过编译。我想把a作为f的默认形参。 展开
3个回答
展开全部
其实准确的说,你所说的函数说明是指函数的前项声明。也就是在程序前面,一般在main前面用如下格式声明一个函数:类型+函数名+(参数类型或者默认参数)+分号
你给出的这两个程序不矛盾。第一个中并没有前项声明函数,只是sum函数在main前面定义。第二个则不同,point函数在main前面是前项声明(注意void point(int x=10,y=20);这句是加了分号的),仅仅是声明没有定义,而point函数的定义是放在main后才真正定义的。
函数为什么要前项声明呢,这是因为在比较大的程序中,某些地方调用函数的时候,被调用的函数还没被定义,前项声明的作用就是在程序的最开头就声明了函数名和参数要求,那么整个程序在任何地方都可以调用这个函数。即声明的意思就是告诉整个程序,某个函数名是合法的。
换在你给的第二程序的理解为,main函数要调用point函数,如果前面没有声明,那么main函数就不认识point这个函数。你可以尝试注释掉void point(int x=10,y=20);这句,编译就会报错。但因为这个程序是非常简单的小程序,所以你可以把point函数的定义放在main前面,与此同时把oid point(int x=10,y=20);这句删除,程序也是对的。
明白了吧,你所说的第一节的SUM函数是没有你所说的“说明”的,也就是第一节的只是定义没有前项声明。第二节的首先前项声明,然后再定义的。
你给出的这两个程序不矛盾。第一个中并没有前项声明函数,只是sum函数在main前面定义。第二个则不同,point函数在main前面是前项声明(注意void point(int x=10,y=20);这句是加了分号的),仅仅是声明没有定义,而point函数的定义是放在main后才真正定义的。
函数为什么要前项声明呢,这是因为在比较大的程序中,某些地方调用函数的时候,被调用的函数还没被定义,前项声明的作用就是在程序的最开头就声明了函数名和参数要求,那么整个程序在任何地方都可以调用这个函数。即声明的意思就是告诉整个程序,某个函数名是合法的。
换在你给的第二程序的理解为,main函数要调用point函数,如果前面没有声明,那么main函数就不认识point这个函数。你可以尝试注释掉void point(int x=10,y=20);这句,编译就会报错。但因为这个程序是非常简单的小程序,所以你可以把point函数的定义放在main前面,与此同时把oid point(int x=10,y=20);这句删除,程序也是对的。
明白了吧,你所说的第一节的SUM函数是没有你所说的“说明”的,也就是第一节的只是定义没有前项声明。第二节的首先前项声明,然后再定义的。
展开全部
class tc
{
private:
int a;
public:
void f(int &i) //修改
{
i=a+1; //就可以
}
}w;
{
private:
int a;
public:
void f(int &i) //修改
{
i=a+1; //就可以
}
}w;
追问
原本的意图是给a加了1,你的修改后意图变了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
既要引用,又要默认形参、、二者貌似不可兼得。
更多追问追答
追问
不引用 即void f(int i=a) 貌似也编译不了
追答
a你没赋值当然编译不了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询