• 构造函数constructor 与析构函数destructor(一)


    构造函数定义:构造函数c++中在创建对象时自动调用,用来初始化对象的特殊函数。

    (1)构造函数的名字必须与类的名字相同,不能有返回值,哪怕是void 也不行。

    (2)通常情况下构造函数应声明为公有函数,否则它不能像其他成员函数那样被显式地调用 构造函数被声明为私有有特殊的用途,这个以后再写。

    (3)但是可以有参数,因为有参数,故可以被重载。

     1 #ifndef TEST_H
     2 #define TEST_H
     3 class Test{
     4     int m_i;
     5 public:
     6     Test(int i=0);
     7     Test(int i,char c);//构造函数被重载
     8     void fun();
     9     void fun(int i=0);//普通函数被重载,不过这种重载会有问题,当在函数中以fun()这种形式调用fun函数时,连接器就不知道链接哪一个具体的fun了。
    10 
    11 };
    12 #endif //TEST_H

    (4)不带参数的构造函数 或者所有的参数都有默认值的构造函数,成为默认构造函数,默认构造函数只能有一个,如果默认构造函数既包含不带参数的,也包含所有参数都有默认值的,那么编译器就会报错。

     1 #ifndef TEST_H
     2 #define TEST_H
     3 class Test{
     4     int m_i;
     5 public:
     6     Test(int i=0);
     7         Test();//类中有两个默认构造函数
     8 
     9 };
    10 #endif //TEST_H

    (5)如果程序中未声明任何构造函数,则系统自动产生出一个默认构造函数,但是只要程序员自己生命了一个构造函数,编译器就不会再生产默认构造函数。

    (6)构造函数和delete:可以在堆中用new operator 分配一个对象的空间,这种分配的对象空间要由程序员自己释放,用delete,在new时调用constructor 在delete时调用destructor。

     1 #ifndef TEST_H
     2 #define TEST_H
     3 class Test{
     4     int m_i;
     5 public:
     6     Test(int i = 0){};
     7     Test(int i, char c){};
     8 
     9 };
    10 #endif //TEST_H
    11 
    12 int main(){
    13 
    14     Test* tp = new Test();//调用constructor
    15     delete tp;//调用destructor
    16     return 0;
    17 }

    (7)一般的局部类对象的初始化顺序,即构造函数被调用的顺序,一般语气定义的顺序一样,释放的顺序,即析构函数被调用的顺序,一般与构造函数调用的顺序相反。

    (8)全局对象的构造函数在主函数main之前被调用,在main函数结束时,析构函数被调用

    (9)构造函数和数组

    #ifndef TEST_H
    #define TEST_H
    class Test{
        int m_i;
    public:
        Test(int i = 0){}
        Test(int i, char c){}
        ~Test(){}
    
    };
    #endif //TEST_H
    
    int main(){
    
        Test* tp=Test[2];//创建一个Test对象的数组,被tp指针指向。
             delete [] tp;//删除指向数组的指针,一定要加[]。
        return 0;
    }

    析构函数的定义:析构函数是c++中的类对象生存期结束时,被调用用来释放对象空间的特殊函数,也是自动调用的。

    (1)析构函数的名字在类名前加一个~符号

    (2)析构函数不能有返回值,也不能有参数,因此不可以重载

    (3)析构函数可以被显示的调用,构造函数不行

     1 #ifndef TEST_H
     2 #define TEST_H
     3 class Test{
     4     int m_i;
     5 public:
     6     Test(int i = 0){}
     7     Test(int i, char c){}
     8     ~Test(){}
     9 
    10 };
    11 #endif //TEST_H
    12 
    13 int main(){
    14 
    15     Test* tp = new Test();
    16     tp->~Test();//显示调用析构函数
    17     delete tp;
    18     return 0;
    19 }
  • 相关阅读:
    Linux 安装Zookeeper<集群版>(使用Mac远程访问)
    04寻找两个数组的中位数
    28实现strSTR()
    125验证回文串
    124,二叉树中的最大路径和
    123买卖股票的最佳时机III
    02爬取豆瓣最受欢迎的250部电影
    01爬取当当网500本五星好评书籍
    112买卖股票的最佳时机II
    121.买卖股票的最佳时机
  • 原文地址:https://www.cnblogs.com/cplinux/p/5615980.html
Copyright © 2020-2023  润新知