构造函数与拷贝构造函数,以及析构函数

构造函数:创建类对象

构造函数是在对象被创建时利用特定的值构造对象,并将对象初始化为一个特定的状态。
构造函数的函数名与类名相同,并且它没有返回值,而且构造函数一般被声明为公有函数。
如果类中没有写构造函数,编译器会自动生成一个隐含的默认构造函数,该构造函数的参数列表和函数体皆为空。但是如果类中声明了构造函数(无论有没有参数),编译器都不会再为之生成隐含的构造函数。
作用:
创建对象
初始化其值
构造函数执行步骤:
传参
按照类中成员变量生命顺序,依次构造其该成员
执行构造该函数体

构造函数有两种重载方式:
有参和无参(即默认构造函数)
例:作为类的成员函数,构造函数可以直接访问类的所有数据成员,可以是内联函数,也可带有参参数,可以默认的形参。

class Clock{
pubic:
Clock(int newH, int newM,int newS);
Clock()
{hour=0;
minute=0;
second=0;
}
void setTime(int newH, int newM,int newS);
void showTime();
private:
int hour,minute,second;
};
//其他函数实现……
int main()
{Clock c1(0,0,0);    //调用有参数的构造函数
Clock c2;               //调用无参数的构造函数
}

析构函数:释放类对象

析构函数实在对象的生存周期结束的时刻自动被调用,用来删除释放该对象。
析构函数通常也是类的一个公有函数成员,他的名称是由类名前面加~构成,它没有返回值。
并且与构造函数不同,析构函数没有参数,所以他也就不能被重载,就是说一个类中只能有一个析构函数。
执行步骤:
析构函数的执行步骤:
(1)执行析构函数函数体;
(2)按照类中成员变量声明顺序的逆序,一次释放其成员。
例:一个clock类的析构函数

class clock
{
public:
~clock();//析构函数
}

析构函数:主要用来完成对象被删除前的一些清理操作。生存期是即将结束的时刻被自动调用。即使没有此类函数,系统也会生成一个函数体为空的隐含析构函数。
注意:析构函数没有重载

复制(copy)构造函数

这是一种特殊的构造函数,具有一般构造函数的特性
形参是本类对象的引用。作用使用一个已存在的对象,去初始化新对象
如果没有定义,系统在必要时会生成一个隐含的构造函数(功能把初始值对象的每个数据都复制到新建立的对象中)
复制(copy)构造函数的实现
class 类名
{
public:
类名 (形参表)://构造函数
类名(类名&对象名)://复制构造函数
……
};

类名 ::类名(类名&对象名)//复制构造函数的
{
函数体
}
复制构造函数的引用方式
1)当用类的一个对象去初始化该类的另一个对象时。
例:

  int main()
   {
   Point a(1,2);
   Point b(a);//用对象a来初始化对象b,复制构造函数被调用
   Point c=a;//用对象a来初始化对象c,复制构造函数被调用
   return 0;
}

2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时。例:

void f(Point p)
{

}
int main()
{
Point a(1,2);
f(a);     //函数的形参为类的对象,当调用函数时,复制构造函数被调用
return 0;  //调用函数时参数为一个对象,所以相当于用实参a来初始化形参p 即相当于                    
}                  //Point p=a;

只有把对象用值传递时,才会调用Copy函数;传递引用,不会被调用
3)如果函数的返回值是类的对象,函数执行完成返回调用者时。例:

Point f()
{
Point a(1,2);
return a;//函数的返回值是一个类对象,返回函数值时,调用复制构造函数
}
int main()
{
Point b;
b=f();
return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值