C++中的构造函数与析构函数

来源:互联网 发布:非凡软件站手机版 编辑:程序博客网 时间:2024/06/07 14:59

什么是构造函数与析构函数?

前面我们说过,在类的定义时,我们不能对成员数据进行初始化。但有时候,我们又需要对成员数据进行初始化,这时候构造函数就派上用场了。构造函数的功能就是在创建对象时,用给定的参数值对类里的数据进行初始化。析构函数会在类的对象的生命周期结束时自动调用,我们可以利用这一特点来做些内存释放的工作。

1.构造函数

构造函数会在对象建立时自动调用,我们一般将变量、对象的初始化代码放在构造函数里。
在C++里,构造函数必须与自己所在的类同名,它可以带参数,也可以不带参数,值得一提的是,尽管构造函数的名字是固定的,必须与与其所在类的名字相同,但构造函数却可以有多个
示例:

class CMyClass    {         publicCMyClass(int x)//带参数的构造函数           {                 para1 = x;           }       private:           int para1;    };

构造函数既可以带参数,也可以不带参数,既可以带一个参数,也可以带不同的参数,还可以带不同的参数。如上所言,在同一个类里,可以有许多的构造参数。如下所示:

class CMyClass    {         publicCMyClass(int x)//带参数的构造函数           {                 para1 = x;           }            CMyClass(char *s1, char *s2)//带多个参数的构造函数           {                 str1 = s1;               str2 = s2;           }       private:           int para1;           char *str1,*str2;    };

特点:
(1).当构造函数重载时,应避免二义性
(2).构造函数没有也不需要指定返回值类型
(3).当类用于定义对象时,构造函数必须为共有型,只有这样类才能示例化,换句话说,只有这样,对象才能用这个类来定义。当这个类只用于派生其他类时,构造函数可定义为保护型成员函数。

1.2 默认构造函数

如果你自己并没有定义构造函数,那么编译会自动隐式生成一个不带参数的默认构造函数,其意义在于满足语法需要,因为我们在生成对象时,通常如下:

CMyClass myClass;//生成对象

只有在类中包含一个

CMyClass()       { }

方能合法。
在我们自己创造了构造函数之后,默认的构造函数不再存在,

CMyClass myClass;//生成对象

会因为找不到默认的构造函数而出现编译错误,这时需要我们人为地添加一个不带任何参数的构造函数,即显式的默认构造函数,只有这样,上述语句才 不会造成编译错误。

2.析构函数

构造函数有且仅有一个,如果我们不人为添加,则编译会自动生成一个隐式的默认析构函数。
析构函数是在类名称前加一个”~“逻辑非的符号。示例:

class CMyClass    {        //.......       public:          ~ CMyClass()//析构函数           {              }       //........    };

特点:
(1)没有任何参数,不返回任何值。
(2)在类的对象调用结束时,析构函数会被自动调用。
根据第二个特点,我们在析构函数的结构体里添加delete函数来释放对象,从而达到清理内存的效果。

原创粉丝点击