C++精讲3构造函数与析构函数

一.类::构造函数

1.编码规范:声明变量赋初值

int i=0;

int *p=NULL;  //最新版本为nullptr

malloc申请到的内存区域使用memset进行设置

2.对象在定义时进行初始化

完成对象初始化的函数即构造函数

类的对象的初始化只能由类的成员函数来进行;

简历对象的同时,自动调用构造函数;

类对象的定义涉及到一个雷鸣和一个对象名;

由于类的唯一性和对象的多样性,用类名而不是对象名来作为构造函数名;

默认构造函数:没有定义构造函数时,编译器会提共一个默认构造函数;(C++规定,类必须有一个构造函数)

只要定义一个构造函数,C++编译器就不再提供默认的构造函数;

与定义变量类似,在默认构造函数创建对象时,如果创建的是全局对象或静态对象,则对象的位模式全为0,否则对象值是随机的;

例如:

class Car{

public:

voidrun();

voidstop();

private:

int m_price;

int m_carNum;

};

此类中没有定义构造函数,编译器的默认构造函数为在定义对象时给予m_price,m_carNun一个默认的随机值。

定义一个构造函数:

class Car{

public:

Car();//构造函数也可以重载;此也为默认的构造函数

Car(int price=1000,int number=0);    //实参必须给初始值 否则定义构造函数将会出错

voidrun();

voidstop();

void set(int price, int number);

private:

int m_price;

int m_carNum;

};

实现:

Car::Car(int price, int number)     //定义放在类的的外部时的格式 “类名::”

{

set(price,number);   //调用类的成员函数set();

}

构造函数另一个特殊之处是它没有返回类型,函数体中也不允许有返回值,但可以有无值返回语句 " return;".

如果建立一个对象数组:Desk dd[5]; //对象数组dd,构造函数会被调用5次

3.构造函数的初始化列表中数据的初始化顺序和声明的顺序相同

例如:

class Student{

public:

  Student(int id):m_id(id),m_score(100)   //冒号表示后面要对类的数据成员进进行初始化(性能更快)
  {

//一般情况下使用这种构造函数初始化
      /*
     m_id=id;
     m_score=100;
      */

private:

int m_id;

int m_score;

 };  

  构造函数可以有多个,可以被重载;构造函数可以用于隐式类型转换;//加关键字explicit来防止隐式类型转换

二.类::析构函数

一个类可能在构造函数里分配资源,这些资源需要在对象不复存在以前被释放;

析构函数也是特殊类型的成员,没有返回类型,没有参数,不能随意调用,也没有重载。只是在类对象生命期结束的时候,由系统自动调用;

析构函数名,就是在构造函数名前加上一个逻辑非运算行“~”,表示逆构造函数。

例如:

  4 class Student{
  5     public:
  6         explicit Student(int id);
          //构造函数
  7         ~Student();          //析构函数
  8         inline int getId()
  9         {
 10             return m_id;
 11         }
 12         void setId(int id)
 13         {
 14             m_id=id;
 15         }
 16        inline  int getScore()
 17         {
 18             return m_score;
 19         }
 20         void setScore(int score)
 21         {
 22             m_score=score;
 23         }
 24      private:
 25         int m_id;
 26         int m_score;
 27 };

    如果类没有自定义析构函数,编译器提供一个默认的析构函数,而且只有一个。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

煮雨小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值