c++学习_构造函数的三种情况下的应用

本文探讨了C++构造函数的三种应用场景:创建对象、对象初始化和担当类型转换角色。通过示例代码解释了如何在初始化对象时调用构造函数,以及在整型值与对象赋值过程中构造函数如何进行类型转换。同时指出,能否进行赋值取决于临时对象能否成功构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造函数应用于以下三中情况:

(1)创建一个对象

(2)给对象初始化

(3)担当类型转换的角色

构造函数用来创建一个对象大家都知道这里就不详细说明了,下面仔细的分析下第2,3种情况。

    给对象初始化:

        以下这个例子的运行结果是调用了两次构造函数。第一次是Test t;调用构造函数构造一个对象。第二次是t = 100;调用构造函数给对象初始化。那么为什么这里会调用一次构造函数呢?看下面的分析。

#include <iostream>
using namespace std;

class Test
{
public:
    Test(int d = 0)
    {
        cout<<"create a object"<<this<<endl;
        data = d;
    }
private:
    int data;
};

int main(int argc, char **argv)
{
    Test t;         //构造对象
    t = 100;       //给对象初始化。(这里有个疑问为什么一个整型值100可以给一个Test类型的对象赋值,两个的类型都
    return 0;                                    不一样)
}    

之所以能进行赋值是因为构造函数能接收一个整型数据,通过整型数据这个参数可以构造一个Test类型的临时对象,这个临时对象的类型跟t的类型相同都是Test类型的,这个临时对象的data值为100,然后这个临时对象把值100给t对象,这个临时对象完成使命后就自己析构了。这样就完成了整型值给对象赋值的操作了。(所以会多因此调用拷贝构造函数,同时也担当了类型转换的角色)

但是有时候这个100是不能够给t赋值的,能不能赋值取决于这个临时对象能不能构建成功。例如下面的例子就不能进行赋值。

如果把上面例子中的构造函数写成这样临时对象就不能构建成功。(因为这个构造函数不能够接收一个整型数据

Test()
    {
        cout<<"create a object"<<this<<endl;
        data = 0;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值