创建对象的几种写法。

#include <iostream>
#define trace() cout<<__FUNCTION__<<":"<<__LINE__<<endl;
using namespace std;
class Demo{
public:
    explicit Demo(int val = 99):val(val){
        trace();
    }
    Demo(const Demo &demo){
        this->val = demo.val;
        cout<<"copy:";
        trace();
    }
    void func(){}
    int val;
};
class Demo2{
public:
    Demo2(int val = 99):val(val){
        trace();
    }
    void func(){}
    int val;
};
int main(){
    Demo _demo(100);//语句1:自动调用Demo类的转换构造函数创建_demo对象
    Demo _demo1(_demo);//语句2:自动调用Demo类的默认复制构造函数创建_demo1对象
    Demo _demo2 = Demo(100);//语句3:显式调用Demo类的转换构造函数创建_demo2对象
    //Demo _demox = (100);//语句4:错误,explicit限制转换构造函数在初始化对象时必须显示调用
    Demo _demoy = _demo;//语句5:隐式调用复制构造函数创建_demoy对象
    Demo _demoz = Demo(_demo);//语句6显式调用复制构造函数创建_demoz对象
    Demo2 _demo3 = 100;//语句7:隐式调用的Demo类的转换构造函数创建_demo3对象
    Demo2 _demo4;//语句8:调用Demo2类的自定义构造函数创建_demo4对象
    _demo4 = _demo3;//语句9:仅仅是通过Demo2类的默认"="运算符重载函数把_demo3的成员变量赋值给_demo4的成员变量。
    return 0;
}

C++语言里面在创建一个对象的时候有两种写法:
语句1跟语句2这种形式,系统调用构造函数创建对象
其他方法就是显示或隐式的调用构造函数创建对象
另外:
_demo4 = _demo3;实际上是”=”运算符的重载,而
Demo _demo2 = Demo(100);中的”=”是表示对_demo2对象调用Demo(100)初始化,并不是赋值的意思,因为trace()只打印了一次,说明构造函数只调用了一次。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值