构造函数

1、类内部没有任何构造函数时

class stu{
    private :
        int id;
        string name;
    public:
};
int main()
{
    stu b;
    return 0;
}
此时,调用编译器调用默认的无参构造函数,此构造函数什么也不做。

2、类内部有无参数的构造函数

class stu{
    private :
        int id;
        string name;
    public:

    stu()
    {
        id=1;
        name="jack";
        cout<<"this construc function is used"<<endl;
    }
    void show()
    {
        cout<<id<<" "<<name<<endl;
    }
};
int main()
{
    stu b;
    b.show();
    return 0;
}
此时调用类内部的无参数构造函数

3、类内部有多个构造函数时

class stu{
    private :
        int id;
        string name;
    public:

    stu(int a,string b="jack")
    {
        id=a;
        name=b;
        cout<<"finish"<<endl;
    }

    stu()
    {
        id=1;
        name="jack";
        cout<<"this construct function is used"<<endl;
    }
    void show()
    {
        cout<<id<<" "<<name<<endl;
    }
};
int main()
{
    stu a(1);
    a.show();
    stu b;
    b.show();
    return 0;
}

执行结果:

1 jack
this construct function is used
1 jack
class stu{
    private :
        int id;
        string name;
    public:

    stu(int a,string b="jack")
    {
        id=a;
        name=b;
        cout<<"finish"<<endl;
    }

    void show()
    {
        cout<<id<<" "<<name<<endl;
    }
};
int main()
{
    stu b;
    b.show();
    return 0;
}

执行结果:

[Error] no matching function for call to 'stu::stu()'

此时,说明如果类内部有构造函数,那么在调用构造函数时,编译器就会去匹配类内部构造函数,看是否可以匹配上。
此程序,若添加无参构造函数则可以正确运行;或者将构造函数改为stu(int a=1,string b=”jack”)。

4、构造函数用在数组中

class test{
test(int n,int m){}//1
test(int n){}//2
test(){}//3
};
test array1[3]={1,test(1,2)};
第一个对象初始化调用构造函数1,第二对象初始化调用构造函数2,第三个对象初始化调用无参构造函数3; 
test array2[3]={test(1,2),test(1,2),1};
//test array2[3],生成三个test对象,三个元素分别用2,2,1初始化
test * pArray[3]={new test(4),new test(1,2)}
pArray是指针数组,每一元素都是指向test对象的指针;
test * pArray[3]前半句并不会生成test对象,只是构建了三个指针。
第一个指针指向了new test(4)生成的对象,第二个指针指向new test(1,2)生成的对象,第三个指针为空。

NOTE:
构造函数并不负责分配对象的存储空间,只是在对象创建之后,即存储空间分配之后,对对象的属性值进行初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值