主题:[讨论]为什么我的缺省构造函数没用啊
wzhao1230
[专家分:70] 发布于 2008-03-30 12:17:00
#include<iostream>
using namespace std;
class Myclass {
int xpos,ypos;
public:
Myclass(int ix,int iy);
Myclass():xpos(2),ypos(3){};
void show ();
};
Myclass::Myclass(int ix=9,int iy=7) {
xpos=ix;
ypos=iy;
}
void Myclass::show(){
cout<<"xpos="<<xpos<<endl;
cout<<"ypos="<<ypos<<endl;
}
int main()
{
Myclass obj();
obj.show();
return 0;
}
大家帮忙看一下我的缺省构造函数为什么不能用啊,谢谢![code=c]
请填写代码
[/code]
回复列表 (共11个回复)
沙发
ynwszk [专家分:200] 发布于 2008-03-30 12:24:00
Myclass obj();
是一个函数申明;
Myclass obj;
就对了.
板凳
wzhao1230 [专家分:70] 发布于 2008-03-30 12:39:00
也不行啊?
我试过了
3 楼
ynwszk [专家分:200] 发布于 2008-03-30 13:03:00
Myclass::Myclass(int ix,int iy) {
xpos=9;
ypos=7;
}
就可以了,你有两个默认构造函数了
4 楼
wzhao1230 [专家分:70] 发布于 2008-03-30 13:59:00
一个的构造函数,一个是缺省构造函数啊,没错啊
5 楼
ynwszk [专家分:200] 发布于 2008-03-30 14:30:00
Myclass(int ix=9,int iy=7)
两个形参都有默认值
编译器不能确定哪一个哪一个构造函数是最佳匹配了
6 楼
f-wind [专家分:1240] 发布于 2008-03-31 09:04:00
class Myclass {
int xpos,ypos;
public:
Myclass(int ix,int iy);
Myclass():xpos(2),ypos(3){};
void show ();
};
Myclass::Myclass(int ix=9,int iy=7) {
xpos=ix;
ypos=iy;
}
改为:
class Myclass {
int xpos,ypos;
public:
Myclass(int ix=9,int iy=7);
Myclass():xpos(2),ypos(3){};
void show ();
};
Myclass::Myclass(int ix,int iy) {
xpos=ix;
ypos=iy;
}
7 楼
chaos3022 [专家分:90] 发布于 2008-04-01 09:51:00
楼上说的对。。
但在main()中:
Myclass obj;
注意()要去掉
当运行这一句代码时,你的两个构造函数都符合调用规则,所以产生二义性,编译就通不过了。两个构造函数都可以默认无初值哈。。
8 楼
wzhao1230 [专家分:70] 发布于 2008-04-02 16:27:00
还是不行啊,你试过没啊,可以给我完整的程序吗?
谢了
9 楼
wzhao1230 [专家分:70] 发布于 2008-04-02 16:29:00
这样的话ix,iy都没用是了,好像?
10 楼
chaos3022 [专家分:90] 发布于 2008-04-02 18:29:00
#include<iostream>
using namespace std;
class Myclass {
int xpos,ypos;
public:
Myclass(int ix=9,int iy=7);
//Myclass():xpos(2),ypos(3){};//注释掉,不用此函数就ok了
void show ();
};
Myclass::Myclass(int ix,int iy) {
xpos=ix;
ypos=iy;
}
void Myclass::show(){
cout<<"xpos="<<xpos<<endl;
cout<<"ypos="<<ypos<<endl;
}
int main()
{
Myclass obj,obj1(1),obj2(1,2);
obj.show();
obj1.show();
obj2.show();
return 0;
}
我来回复