IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 6.析构函数和构造函数 -> 正文阅读

[C++知识库]6.析构函数和构造函数

1.构造函数

  1. 特征:

    1. 函数名与类名相同
    2. 函数没有返回值
    3. 函数不需要用户调用,在创建对象的时候自动调用
  2. 作用:用于在定义对象的时候,初始化对象中的数据成员

  3. 语法:

    class  类名
    {
         public:
     	//构造函数
      	类名()   
        {
            
        }   
    }
    
    例子: 
        class base
        {
            public: 
             base()
             {
                 cout << "调用构造函数" << endl;
             }
        }
    
  4. 注意:

    1. 构造函数必须要写在公共区,因为在创建对象的时候会自动调用该函数,假设不是公共区的函数,则无法调用,导致对象的创建失败 。
    2. 假设用户没有写任何的构造函数,则系统会自动生成一个无参构造函数。
  5. 提示:
    1. 构造函数也支持函数重载
    2. 构造函数也支持默认参数

2.析构函数

  1. 特征:
    1. 函数名与类名相同在函数名前面添加 ~
    2. 析构函数没有返回值,没有参数
    3. 对象销毁的时候系统自动调用(析构函数可以释放成员空间)
  2. 作用: 用于释放构造函数中初始化的数据成员。
  3. 注意:
    1. 析构函数是不可以重载的,因为重载的依据是参数!
    2. 析构函数也需要编写到公共区中,因为对象销毁时自动调用。
  4. 原理
    在这里插入图片描述

3.构造函数的参数列表初始化

  1. 作用: 在构造函数中一种特殊的初始化方式,用于初始化类中的数据成员。
    在这里插入图片描述

  2. 提示:这种初始化方式并不是万能的,如果数据类型不支持 =号赋值就不能用该方法,例如:数组

4. 拷贝构造函数 (重点,难点)

  1. 系统自动生成的浅拷贝方法:

    #include  <iostream> 
    using namespace std; 
    class  base
    {
    	public: 
       	//设计一个构造函数 
       	base(int a,int b):a(a),b(b){}
    	void show()
    	{
    	     cout << a << endl;
    	     cout << b << endl;
    	}
    	private:
    		int a; 
    		int b;
    };
    int main()
    {
         base  a(10,20);
         a.show();
    
         //通过一个对象去初始化另外一个人对象 
         base b=a;  //系统会自动生成一个浅拷贝构造函数,把a对象的数据赋值给b对象
         b.show(); 
    }
    
  2. 浅拷贝 -》 直接赋值
    在这里插入图片描述

  3. 重写系统的拷贝构造函数
    当在构造函数中传递的参数是类的引用时,那么这个构造函数就是重写后的拷贝构造函数
    语法:

    class  类名 
    {
      	public:  
        类名(类名 &a)   //重写后的拷贝构造函数 ,
        {
            
        }    
    }
    提示:当用户重写拷贝构造函数后,系统就不会自动生成一个浅拷贝构造方法 
    --------------------------------------------------------------
     例子: 
    class  base
    {
        public: 
        base(base &a)
        {
            cout <<  "重写后的拷贝构造函数" << endl; 
        }
    } 
    

    在这里插入图片描述

  4. 深拷贝

    • 为什么需要深拷贝?
      在这里插入图片描述

    • 重写拷贝构造函数,实现深拷贝

      class  base
      {
      	public:
      		base(const char *str)
      		{
              	//分配p所指向的堆空间 
      	        p  =  new  char[1024]; 
      	        //把str数据赋值到堆空间中 
      	        strcpy(p,str);  
      		}
      		
      		//重写拷贝构造函数,实现深拷贝!!!!!
      		base(base &a)
      		{
      		    cout << "调用重写后的拷贝构造函数,实现深拷贝" << endl; 
      		     //分配p所指向的堆空间  
      		     p= new  char[1024];  
      		     //把a空间中的数据拷贝过来  
      		     strcpy(p,a.p);
      		}
      		
      		 void  show()
      		 {
      		     cout << "堆空间的地址" << (void *)p << "内容" << p << endl; 
      		 }
      		char *p;
      };
      

5. 类外定义类中的成员函数

语法:

	函数的返回值   类名::函数的名称(参数列表)
	{
	    
	}
	-------------------------------------------
	例子: 
	class base
	{
	   public: 
	   void show(); //声明 
	}; 
	
	//类外定义show 接口
	void   base::show()
	{
	    cout << "show base" << endl; 
	}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:05:26  更:2022-03-30 18:06:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:12:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码