课堂笔记(类,构造,析构)

知识点1【类的空间大小】

using namespace std;

class Data

{

private:

    //成员数据 占类的空间大小

    int num;//4B

public:

    

    //成员函数 不占类的空间大小

    void setNum(int data)

    {

        num = data;

    }

    int getNum(void)

    {

        return num;

    }

};

void test01()

{

    printf("%d\n",sizeof(Data));//4B

}

知识点2【在类内声明 类外定义 成员函数

#include <iostream>


using namespace std;

class Data

{

private:

    //成员数据 占类的空间大小

    int num;//4B

public:


    //成员函数 在类内 声明 类外定义

    void setNum(int data);

    int getNum(void);

};


//Data类的成员函数

void Data::setNum(int data)

{

    num = data;

}


int Data::getNum()

{

    return num;

}


void test01()

{

    printf("%d\n",sizeof(Data));//4B


    Data ob;

    ob.setNum(100);

    cout<<"num = "<<ob.getNum()<<endl;

}

int main(int argc, char *argv[])

{

    test01();

    return 0;

}



知识点4【构造和析构函数的概述】
构造函数和析构函数,这两个函数将会被编译器自动调用,构造函数完成对象的初始化动作,析构函数在对象结束的时候完成清理工作。
注意:对象的初始化和清理工作是编译器强制我们要做的事情,即使你不提供初始化操作和清理操作,编译器也会给你增加默认的操作,只是这个默认初始化操作不会做任何事。
构造函数:实例化对象的时候系统自动调用
析构函数:对象释放的时候系统自动调用

知识点5【构造和析构函数定义】(重要)
构造函数语法:
构造函数函数名和类名相同,没有返回类型,连void都不可以,但可以有参数,可以重载
析构函数语法:
析构函数函数名是在类名前面加”~”组成,没有返回类型,连void都不可以,不能有参数,不能重载

知识点6【构造函数的分类以及调用】
1、构造函数分类:
按参数类型:分为无参构造函数和有参构造函数
按类型分类:普通构造函数和拷贝构造函数(复制构造函数)
2、构造函数的调用
注意:在同一作用域 构造和析构的顺序相反

class Data

{

public:

    int num;

public:

    //构造函数(无参的构造)

    Data()

    {

        num = 0;

        cout<<"无参的构造函数 num = "<<num<<endl;

    }

    //构造函数(有参的构造)

    Data(int n)

    {

        num = n;

        cout<<"有参的构造函数 num = "<<num<<endl;

    }


    //析构函数(没有返回值类型 没有参数 不能重载)

    ~Data()

    {

        cout<<"析构函数 num = "<<num<<endl;

    }


};

void test02()

{

    //调用无参 或 默认构造 (隐式调用)

    Data ob1;

    //调用无参构造 (显示调用)

    Data ob2 = Data();


    //调用有参构造(隐式调用)

    Data ob3(10);

    //调用有参构造(显示调用)

    Data ob4 = Data(20);


    //隐式转换的方式 调用有参构造(针对于 只有一个数据成员)(尽量别用)

    Data ob5 = 30;//转化成Data ob5(30)


    //匿名对象(当前语句结束 匿名对象立即释放)

    Data(40);

    cout<<"------"<<endl;

}

运行结果:
在这里插入图片描述
3、拷贝构造函数(系统提供一个拷贝构造函数 赋值操作)

//拷贝构造函数

Data(const Data &ob)//const Data &ob = ob1

{

    //拷贝构造函数 是ob2调用 num就是ob2的num

    //ob2.num = ob1.num

    num = ob.num;

    cout<<"拷贝构造"<<endl;

}
void test03()

{

    Data ob1(10);

    cout<<"ob1.num = "<<ob1.num<<endl;


    //调用拷贝构造函数(如果用户  不实现拷贝构造 系统将调用默认的拷贝构造)

    //默认的拷贝构造:单纯的整体赋值(浅拷贝)

    //如果用户实现了 拷贝构造 系统将调用用户实现的拷贝构造


    Data ob2(ob1);//隐式调用拷贝构造函数

    cout<<"ob2.num = "<<ob2.num<<endl;


    Data ob3 = Data(ob1);//显示调用拷贝构造函数

    cout<<"ob3.num = "<<ob3.num<<endl;


    Data ob4 = ob1;//=隐式转换调用

    cout<<"ob4.num = "<<ob4.num<<endl;

}

运行结果:

在这里插入图片描述记住一句话:旧对象 初始化 新对象 才会调用拷贝构造函数。

Data ob1(10);


Data ob2(ob1);//拷贝构造

Data ob3 = Data(ob1);//拷贝构造

Data ob4 = ob1;//拷贝构造函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值