构造函数的调用规则

规则总结:

1.当类中没有定义任何一个构造函数,c++编译器会提供无参构造函数

2.当类中定义了任意的非拷贝构造函数(无惨,有参),c++编译器不会提供无参构造函数

3.当类中定义了拷贝构造函数时,c++编译器不会提供无参构造函数

4.默认拷贝构造函数成员变量简单赋值

总结:只要你写了构造函数,那么你必须用

#include<iostream>

using namespce std;

class ABCD

{

public:

ABCD(int a,int b,int c)

{

this->a=a;

this->b=b;

this->c=c;

printf("ABCD() construct, a:%d,b:%d,c:%d  \n", this->a, this->b, this->c);

}

~ABCD()

{

printf("~ABCD() construct,a:%d,b:%d,c:%d  \n", this->a, this->b, this->c);

}

int getA()

{

return this->a;

}

protected:

private:

int a;

int b;

int c;



};

class MyE

{

public:

MyE():abcd1(1,2,3),abcd2(4,5,6),m(100)

{

cout<<"MyD()"<<endl;

}

~MyE()

{

cout<<"~MyD()"<<endl;

}

MyE(const MyE & obj):abcd1(7,8,9),abcd2(10,11,12),m(100)

{

printf("MyD(const MyD & obj)\n");

}

 

protected:

//private:

public:

ABCD abcd1; //c++编译器不知道如何构造abc1

ABCD abcd2;

const int m;

 

};

int doThing(MyE mye1)

{

printf("doThing() mye1.abc1.a:%d \n", mye1.abcd1.getA());

return 0;

}

 

int run2()

{

MyE myE;

doThing(myE);

return 0;

}

 

//

int run3()

{

printf("run3 start..\n");

ABCD abcd = ABCD(100, 200, 300);

//若直接调用构造函数哪

//想调用构造函数对abc对象进行再复制,可以吗?

//在构造函数里面调用另外一个构造函数,会有什么结果?

//ABCD(400, 500, 600); //临时对象的生命周期

printf("run3 end\n");

return 0;

}

 

int main()

{

//run2();

run3();

system("pause");

return 0;

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值