c++笔记3-构造与析构

来源:互联网 发布:大数据时代安全挑战 编辑:程序博客网 时间:2024/05/17 06:38

1.构造函数:一般用于对变量初始化
  C++中的类可以定义与类名相同的特殊成员函数
  这种与类名相同的成员函数叫做构造函数
  构造函数在定义时可以有参数,但是没有任何返回类型的声明
  一般情况下C++编译器会自动调用构造函数,在一些情况下则需要手工调用构造函数
两个特殊的构造函数
   无参构造函数:当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空
   拷贝构造函数:当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制
例:
Array.h:
class Array
{
private:
    int mLength;//数组长度
    int* mSpace;

public:
    Array(int length);//构造函数
    Array(const Array& obj);//拷贝构造函数
    int length();
    void setData(int index, int value);
    int getData(int index);
    ~Array();
};
Array.cpp
Array::Array(int length)
{
    if(length < 0)
    {
        length = 0;
    }
    mLength = length;
    mSpace = new int[mLength];
}

Array::Array(const Array& obj)
{
    mLength = obj.mLength;
    mSpace = new int[mLength];
    for(int i=0;i<mLength;i++)
    {
        mSpace[i] = obj.mSpace[i];
    }
}

2.C++中提供了初始化列表对成员变量进行初始化
  语法规则:
Constructor::Contructor() : m1(v1), m2(v1,v2), m3(v3)
{
    // some other assignment operation
}
  注意:
  成员变量的初始化顺序与声明的顺序相关,与在初始化列表中的顺序无关
  初始化列表先于构造函数的函数体执行
例;#include <stdio.h>

class M
{
private:
    int mI;
public:
    M(int i)
    {
        printf("M(int i), i = %d\n", i);
        mI = i;
    }
   
    int getI()
    {
        return mI;
    }
};

class Test
{
private:
    const int c;
    M m1;
    M m2;
public:
    Test() : c(1), m2(3), m1(2)
    {
        printf("Test()\n");
    }
   
    void print()
    {
        printf("c = %d, m1.mI = %d, m2.mI = %d\n", c, m1.getI(), m2.getI());
    }
};

void run()
{
    Test t1;
   
    t1.print();
}

int main()
{
    run();
   
    printf("Press any key to continue...");
    getchar();
   
    return 0;
}
3.类中的const
  类中的const成员是肯定会被分配空间的
  类中的const成员变量只是一个只读变量
  编译器无法直接得到const成员变量的初始值,因此无法进入符号表成为真正意义上的常量。

4.析构函数:
  C++中的类可以定义一个特殊的成员函数清理对象
  定义:~ClassName()
  析构函数没有参数也没有任何返回类型的声明
  析构函数在对象销毁时自动被调用
  析构函数是对象所使用的资源及时释放的保障
  析构函数的调用秩序与构造函数相反

 Array::~Array()
{
    mLength = -1;
    delete[] mSpace;
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 玩穿越火线屏幕两边是黑的怎么办? 8g内存只有2g可用怎么办? 三星7e微信分身打不开怎么办? 光猫的网口1不亮怎么办 两年前的发票发现名头有错误怎么办 苹果5s手机通话声音小怎么办 华为全网通手机电信卡打不了怎么办 合约机移动违约不返话费我该怎么办 电信手机卡合约套餐要到期了怎么办 苹果6s联通4g网速慢怎么办 营业厅买到的不是全网通手机怎么办 全网通手机联通卡被禁用怎么办 红米5手机关机充电自动开机怎么办 华为平板怎么解锁密码忘了怎么办 华为荣耀手机开锁密码忘记了怎么办 畅玩7x密码忘了怎么办 过了时的手机没有刷机包怎么办? 刷了个刷机包游戏玩不了了怎么办? 华为麦芒5手机外放声音小怎么办 微信显示存储卡已拔出怎么办 储存卡已拔出微信头像不可用怎么办 智能手机的电话卡取不出来了怎么办 换了苹果手机通讯录没了怎么办 手机玻璃膜一角翘起来了怎么办 华为畅玩7x耗电快怎么办 魅蓝5s充电器死机了怎么办 苹果手机乐动力不计步数怎么办 意大利居留按手印时间过了怎么办 酷派t1手机解析包出现问题怎么办 p新买的手机壳有味怎么办 门锁钥匙口竖着钥匙放不进去怎么办 摩拜单车被别人骑走了怎么办 捡到苹果8p手机怎么办才能自己用 用力按压导致玻尿酸变形移位怎么办 华为麦芒5应用锁密码忘了怎么办 华为麦芒6应用锁密码忘了怎么办 华为手机的设置不在桌面了怎么办 华为手机所有应用都不在桌面怎么办 华为麦芒5设置页面不显示怎么办 华为麦芒5主屏页面不显示怎么办 6s p换屏幕原装太贵怎么办