回 帖 发 新 帖 刷新版面

主题:[讨论]为什么我的缺省构造函数没用啊

#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个回复)

沙发

Myclass obj();
是一个函数申明;
Myclass obj;
就对了.

板凳


也不行啊?
我试过了

3 楼

Myclass::Myclass(int ix,int iy) {
    
        xpos=9;
        ypos=7;
}
就可以了,你有两个默认构造函数了

4 楼

一个的构造函数,一个是缺省构造函数啊,没错啊

5 楼

Myclass(int ix=9,int iy=7)
两个形参都有默认值
编译器不能确定哪一个哪一个构造函数是最佳匹配了

6 楼

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 楼

楼上说的对。。

但在main()中:
    Myclass obj;
注意()要去掉
当运行这一句代码时,你的两个构造函数都符合调用规则,所以产生二义性,编译就通不过了。两个构造函数都可以默认无初值哈。。

8 楼


还是不行啊,你试过没啊,可以给我完整的程序吗?
谢了

9 楼


这样的话ix,iy都没用是了,好像?

10 楼

#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;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册