zoukankan      html  css  js  c++  java
  • C++ 构造函数和析构函数

    1. 构造函数

    定义:每个类都分别定义了它的对象被初始化的方式,类通过一个或者几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。构造函数的任务是初始化类对象的数据成员,只要类的对象被创建,就会执行构造函数。

    1. 构造函数的名字和类名相同。
    2. 和其他函数不一样的是,构造函数没有返回类型。
    3. 类可以含有多个构造函数。
    4. 不同于其他成员函数,构造函数不能被声明为const的。当我们创建类的一个const对象时,直到构造函数完成初始化过程,对象才能真正取得其“常量”属性。

    合成的默认构造函数

    类通过一个特殊的构造函数来控制默认初始化过程,这个函数叫做默认构造函数。默认构造函数无需任何实参。
    编译器创建的默认构造函数将按照如下规则初始化类的数据成员:

    1. 如果存在类内的初始值,用它来初始化成员。
    2. 否则,默认初始化该成员。

    2. 析构函数

    定义:析构函数也是一个特殊的成员函数,没有返回值,不需要程序员显式调用,而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个~符合。

    Note:析构函数没有参数,不能被重载,因此一个类只能有一个析构函数。如果用户没有定义,编译器会自动生成一个默认的析构函数。

    析构函数的执行时机

    1. 在所有函数之外创建的对象是全局对象,它和全局变量类似,位于内存分区中的全局数据区,程序在结束执行时会调用这些对象的析构函数。
    2. 在函数内部创建的对象是局部对象,它和局部变量类似,位于栈区,函数执行结束时会调用这些对象的析构函数。
    3. new创建的对象位于堆区,通过delete删除时才会调用析构函数;如果没有delete,析构函数就不会被执行。
    #include<iostream>
    #include<string>
    using namespace std;
    
    class demo
    {
    public:
        demo(string s);
        ~demo();
    private:
        string m_s;
    };
    demo::demo(string s):m_s(s){}
    demo::~demo(){cout << m_s << endl;}
    
    void func()
    {
        //局部对象
        demo obj1("1");
    }
    //全局对象
    demo obj2("2");
    
    int main()
    {
        //局部对象
        demo obj3("3");
        //new创建的对象
        demo *pobj4 = new demo("4");
        func();
        cout << "main" << endl;
        return 0;
    }
    
  • 相关阅读:
    Python笔记-面向对象编程
    大学课后答案微信小程序项目实践(1)
    用weexplus从0到1写一个app(2)-页面跳转和文章列表及文章详情的编写
    react基础学习和react服务端渲染框架next.js踩坑
    基于weex的app开发脚手架weexplus学习笔记
    用weexplus从0到1写一个app
    Vue与React两个框架的区别对比
    mpvue学习笔记-之微信小程序数据请求封装
    Flutter/Dart import导入文件关键字总结
    55个提高你CSS开发效率的必备片段(转自:前段日刊)
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12169389.html
Copyright © 2011-2022 走看看