微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果一个类包含另一个类的对象,是否可以通过在C ++中包含类的构造函数中使用默认值来对其进行初始化?

如何解决如果一个类包含另一个类的对象,是否可以通过在C ++中包含类的构造函数中使用默认值来对其进行初始化?

编译此代码会产生错误

error time constructor time::time(int,int,char) cannot be overloaded with time::time(int,char)

我试图减少重载的构造函数,所以我试图在构造函数参数中提供认值。 entry(int sno=5,time t{1,2,'p'});类的构造函数中的entry行是否有效?如果一个类包含另一个类的复杂对象,那么可以这样初始化吗?

#include<iostream>

using namespace std;


class time
{
    int hours;
    int mins;
    char ap;
    
public:
    time(int hours=0,int mins=0,char ap='n');
    time(int a,int b,char c): hours{a},mins{b},ap{c}
    {
    }
    
    void showtime()
    {
        cout<<"\nTime : "<<hours<<" "<<mins<<" "<<ap<<endl;
    }
};

class entry{
    int sno;
    time t;
    public:
        entry(int sno=5,'p'});
        void showdata()
        {
            cout<<"\ne : "<<sno<<" : ";
            t.showtime();
        }
        
};


int main()
{
    entry e;
    e.showdata();
    return 0;
}

解决方法

是的,这可能与语法有关:

#include<iostream>

using namespace std;

class Time
{
    int _hours;
    int _mins;
    char _ap;
    
public:
    Time(int hours=0,int mins=0,char ap='n'): _hours(hours),_mins(mins),_ap(ap)
    {};
    
    void showtime()
    {
        cout<<"\nTime : "<< _hours << " " << _mins << " " << _ap << endl;
    }
};

class entry{
    int _sno;
    Time _t;
    public:
        entry(int sno=5,Time t = Time(1,2,'p')):
        _t(t),_sno(sno)
        {};
        void showdata()
        {
            cout<<"\ne : "<< _sno<<" : ";
            _t.showtime();
        }
        
};


int main()
{
    entry e;
    e.showdata();
    Time t2(5,'a');
    entry e2(3,t2);
    e2.showdata();
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。