C++类中的构造、析构函数、拷贝构造函数讲解

类的构造函数、析构函数、拷贝构造函数的讲解
一 、构造函数
作用:创建对象时自动完成初始化。
定义的格式:类名(形参表)
{
初始化语句;
}

什么时候调用:1.对象说明语句 如:CA ca();
2.new运算符创建动态对象
如:Ca *pa = new CA();

注意:
如果类没有显示的给出构造函数,系统会自动给出一个缺省的(隐式的)
构造函数,构造函数也能够重载。

二 、拷贝构造函数
作用:将已存在类的对象中的数据成员逐个拷贝到新建的对象中(特殊的构造函数)。
声明形式:类名(const 类名& 对象名);
什么时候调用:
1.当类的一个对象给该类的另一个对象初始化时。
2.如果函数的形参是类的对象,调用函数时,形参与实参进行结合。
3.如果函数的返回值是类的对象,函数调用返回完成时。
注意:
函数一般默认是浅拷贝,就是只拷贝数据成员的值;

三、析构函数
作用:专门用来在对象的生存周期结束时做善后工作的(释放内存);
声明:~类名();
什么时候调用:对象生存周期结束或者是delete释放对象时。

注意:
析构函数没用参数,一个类只能有一个析构函数或者缺省,不能重载。

下面用个实列给大家分析下:

定义一个类:
class Ca
{
private:
int m_ia;
int m_ib;
public:
Ca() //无参构造函数
{
m_ia = 2;
m_ib = 3;
cout<<“调用无参构造函数”<<endl;
}
Ca(int a, int b)//有参构造函数
{
m_ia = a;
m_ib = b;
}
Ca(const CA& ca)// 拷贝构造函数 元宵 类名(const 类名& 形参名)
{
this->m_ia = ca.m_ia+1;//加一为了说明后面的调用情况,实际上的拷贝是直接把值拷贝过 去。
this->m_ib = ca.m_ib+1;
cout<<“调用拷贝构造构函数”<<endl;
}
~Ca()//析构函数
{
cout<<“调用析构函数”<<endl;
}
};
// 2.当函数的形参为类对象,实参与形参结合时会调用拷贝构造
void func(CA ca)// 4.拷贝构造 7 8
{
cout << “ca.m_ia =” << ca.m_ia<< endl; //7
cout << “ca.m_ib =” << ca.m_ib<< endl;// 8
// 5.析构释放
}
// 3.当函数的返回值为类对象时会调用拷贝构造
CA getCA()
{
CA ca(66,77);// 1.有参构造
return ca;// 2.拷贝构造 67 78 3.析构释放
}

int main()
{
//对象说明
Ca ca(); // 调用无参构造函数
Ca ca1(3,4); //调用有参构造函数
//new 对象
Ca *pca = new Ca(5,6)//调用拷贝构造函数
delete pca ;//调用析构函数,注意要释放堆区内存,否则会发现内存泄漏。
pca =NULL; //防止野指针的产生,不置空,则指向了释放的内存产生野指针。
// 1.当用一个对象去初始化该类的另一个对象时,会调用拷贝构造函数
CA ca2 = ca1;//隐式调用拷贝构造 4 5
CA ca3(ca2);// 显示调用拷贝构造 5 6
func(ca3);//调用fun 函数

return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值