第一个问题:
你搞错了,C++ 是允许默认,但是你调用的是指针函数,不是默认参数的函数
你调用max()就可以,但是调用(*p)()就不可以原因就是你的函数指针不是默认参数,当然如果你非要这样也可以:
程序代码:
#include<iostream>
using namespace std;
int main(){
int max(int);
int (*p)(int=4)=&max;
(*p)();
return 0;
}
int max(int x=5){cout<<x<<endl;return x;}
这样就没有问题了!注意要看清楚问题!
第二个问题:
转型函数多少个没关系,怎么定义也没关系。你的错误只要在于你调用的地方
不信你把函数调用注释了,绝对不会出现问题:
程序代码:
#include<iostream>
using namespace std;
class T{
private:
int a;
double b;
public:
T(int a,double b):a(a),b(b){}
operator double(){return b;}
operator int(){return a;}//ÕâÐÐÈç¹û×¢Ê͵ô±àÒëͨ¹ý£¬½á¹ûÕýÈ·
};
int main(){
T x(3,7.37);
// cout<<(2.1+x)<<endl;
return 0;
}
因此你的问题不在转型函数:
另外你所说的参数是什么都无所谓,因为你的转型函数就没哟参数(这是不太合理的说法),当然,当我们调用的时候其实他的参数就相当于构造函数的参数
参数都一样,你还争论什么参数是int和double呢
转型一般都是隐式就行的也就是需要的时候执行,(可以通过explicit关键字禁止这种隐式转型,因为有时候它会带来麻烦)
所以主要区别你的转型函数在你的要转的那个结果的类型,笼统而且不负责任的说是返回值类型;
看下面这个例子:
程序代码:
#include<iostream>
using namespace std;
class T{
private:
int a;
double b;
public:
T(int a,double b):a(a),b(b){}
operator double(){return b;}
operator int(){return a;}//ÕâÐÐÈç¹û×¢Ê͵ô±àÒëͨ¹ý£¬½á¹ûÕýÈ·
};
int main(){
T x(3,7.37);
int a = x;
double b = x;
cout << a << endl << b << endl;
// cout<<(2.1+x)<<endl;
return 0;
}
这样你应该明白了吧,另外你的那个结果之所以错,是不是因为转型函数的问题
你那明显的错误,因为类的类型是你自己定义的,而且double是系统的,系统不可能事先知道你要给他们做加法
因此。你没有重载运算法,因此一个double类型的加上一个类是明显中的错误
哥们突然发现,你的这个错误太明显了,也太幼稚 了