C++函数

构造函数

  1. 构造函数是一种用于创建对象的特殊成员函数,当创建对象时,系统自动调用构造函数。
  2. 构造函数名与类名相同,一个类可以拥有多个构造函数(重载),构造函数可以有任意类型的参数,但不能具有返回类型,连Void也不可以,它有隐含的返回值,该值由系统内部使用。
  3. 构造函数的作用是:为对象分配空间;对数据成员赋初值;请求其他资源。
  4. 如果一个类没有定义构造函数,编译器会自动生成一个无参的默认构造函数。

析构函数

  1. 析构函数名字为符号“~”加类名,析构函数没有参数和返回值。
  2. 一个类中只可能定义一个析构函数,所以析构函数不能重载。
  3. 析构函数的作用是进行清除对象,释放内存等。当对象超出其定义范围时(即释放该对象时),编译器自动调用析构函数。
    在以下情况下,析构函数也会被自动调用:
    (1)如果一个对象被定义在一个函数体内,则当这个函数结束时,该对象的析构函数被自动调用。
    (2)若一个对象是使用new运算符动态创建的,在使用delete运算符释放它时,delete将会自动调用析构函数。用new创建的对象,必须用delete销毁。
  4. delete释放new产生的空间,而delete [] 释放new []产生的数组空间。
    例如:
 class   A   
  {   
      A(){   m_pstr   =   new   char[10];}   
      ~A(){   delete[]   m_pstr;m_pstr   =   NULL;}   
  }   

  A   *pObj   =   new   A[10]; 

拷贝构造函数

  1. 构造函数的参数为自身类的引用时,这个构造函数称为拷贝构造函数。拷贝构造函数的功能是用一个已有对象初始化一个正在建立的同类对象。
  2. 拷贝构造函数的特点如下:
    (1)该函数名与类同名,因为它也是一种构造函数,并且该函数也不被指定返回类型;
    (2)该函数只有一个参数,并且是对某个对象的引用;
    (3)每个类都必须有一个拷贝构造函数;
    (4)如果程序员没有显式地定义一个拷贝构造函数,那么,C++编译器会自动生成一个缺省的拷贝构造函数.
    (5)拷贝构造函数的目的是建立一个新的对象实体,所以,一定要保证新创建的对象有着独立的内存空间,而不是与先前的对象共用。
    在定义一些类时,有时需要(而且强烈推荐)显式地定义拷贝构造函数。
    3.拷贝构造函数主要在如下三种情况中起初始化作用。
    (1)声明语句中用一个对象初始化另一个对象(一定是在”声明并初始化对象”时被调用);例如TPoint P2(P1)表示由对象P1初始化P2时,需要调用拷贝构造函数。
    (2)将一个对象作为参数按值调用方式(而不是指针)传递给另一个对象时生成对象副本(即复制构造函数在”对象作为函数参数”时被调用)。当对象作为函数实参传递给函数形参时,如p=f(N),在调用f()函数时,对象N是实参,要用它来初始化被调用函数的形参,这时需要调用拷贝构造函数。
    (3)生成一个临时的对象作为函数的返回结果。但对象作为函数返回值时,如return R时,系统将用对象R来初始化一个匿名对象,这时需要调用拷贝构造函数。
    4.拷贝构造函数的执行:
    (1)用已有对象初始化创建对象。
    (2)当对象作函数参数时,因为要用实参初始化形参,也要调用拷贝构造函数。
    (3)函数返回值为类类型时,情况也类似。

赋值函数

  1. 赋值操作符则给对象一个新的值,既然是新的值,说明这个对象原来就有值,这也说明,赋值函数只能被已经存在了的对象调用。
  2. 如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。

函数默认参数

转自https://www.cnblogs.com/fnlingnzb-learner/p/5897572.html
带默认值的参数需要放到参数表的最后。
1、编译器不允许默认参数同时存在于声明和定义中。
2、默认参数的语句所在的位置需要在主调函数的语句的前面。
同样适用于类的普通成员函数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值