c++ 构造函数和析构函数

类的构造函数和析构函数

类的数据成员不能在类的声明时候初始化,为了解决这个问题? 使用构造函数处理对对象的初始化。构造函数是一种特殊的成员函数,与其他函数不同,不需要用户调用它,而是创建对象的时候自动调用。析构函数是对象不再使用的时候,需要清理资源的时候调用。

构造函数在类中声明的一种特殊的成员函数

——与所属类名相同
——无返回值
——创建对象时有系统自动调用
——被声明为公有函数
——由new运算符动态创建对象系统自动调用

具有一般成员函数所有的特性
可以访问类的所有数据成员
可以是内联函数
可以无参 可以带参:定义有参的时候 是可以设置形参默认值的
可以重载:一个类 中构造函数可以有多个 以便针对对象不同的特性进行初始化

#include <instream.h>
class CMyclass
{ int a,b;
public:
   CMyclass(int x=3,int y=3)
   //设置了默认参数
   { a=x;b=y;
   }
   .....
};
//对于带默认参数的构造函数 函数声明写在类的里面 函数实现写在类的外面的时候 一定要把它的**初始值**放在**类的内部**来写

CMyclass c1(2,4);
CMyclass c2(4);
CMyclass c3;
  **只有调用构造函数才能完成对象的初始化**
如果用户未定义构造函数 调用西东提供的缺省构造函数
          <类名>::<缺省构造函数名>(){ }
         一个类只有一个缺省的构造函数

[Example] 当调用无参构造函数时
CMyclass c1;//正确
CMyclass c2();//错误
理解:实例化类的对象要调用构造函数 对于错误的那个理解为是对c2函数来进行声明 这个函数不带参 返回类型是CMyclass
所以存在二义性 你可以理解为是构造类的对象 也可以理解为是函数的声明
故为了避免二义性 不要写括号

#include <instream.h>
class CMyclass
{ int a,b;
public:
   CMyclass()
   {
   }
   CMyclass(int x=3,int y=3)
   //设置了默认参数
   { a=x;b=y;
   }
   .....
};
 //定义类对象
 CMyclass c2(2,4);
 CMyclass c;
 //同样具有二义性 是调用无参构造函数还是调用存在缺省值的构造函数呢?
 //故具有二义性

  • 另外显示调用构造函数注意调用的正确方法(语法要求) 这在析构函数一节写了。

复制构造函数:利用已经生成的一个类对象对将要生成的一个类对象进行初始化

int a1=0;
int a2(a1);  //a2=a1 C++特殊语法
CMyclass obj1;
CMyclass obj2(obj1);
//利用复制构造函数来使用

① 复制构造函数是一种特殊的函数
用一个已知的对象(!也就是说作为参!)去创建另一个同类对象
故用一个已经产生的同类的对象作为参数

class class_name
{ public:
    class_name(形参表);//构造函数
    class_name(class_name &obj_name);//声明
    //参是类对象的引用
    说明:
    //也不是必须写类的复制构造函数
    //如果没声明的话 系统会自动生成一个缺省复制构造函数
    //可以把**已有对象的每个数据成员的值**都复制到**新建立对象**中
     ...
 }
 class :: class_name(class_name &obj_name);
 {函数体}
 //复制构造函数的实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值