当前位置: 首页 > c > 正文

构造函数和析构函数

构造函数的作用是给每个对象的数据成员合适的初始值。构造函数的名字与类的名字相同,没有返回值。一个类可以有多个构造函数,通过不同的形参表进行区分。
创建一个类的对象时,编译器自动调用构造函数。
构造函数不能声明为const。当创建的类的对象为const时,调用普通的构造函数即可。const Item A = Item();
构造函数可以包含一个初始化列表。初始化列表以 “:”开始,以“,”分隔数据成员,每个数据成员后面是放在括号里的初始化式。(初始化式只在构造函数的定义中,不在声明中出现。)
Sales_item::sales_item(const string book):isbn(book),units_sold()0 {}
类通过默认构造函数初始化没有被显示初始化的成员变量。没有默认构造函数的类类型以及const或饮用类型的成员必须在构造函数初始化列表中进行初始化。
构造函数初始化列表仅指定用于初始化成员的值,并不指定初始化的顺序。成员被初始化的顺序就是声明成员的顺序。建议按照成员声明的顺序编写初始化列表。
如果类包含内置或复合类型(如指针、数组),应该定义自己的构造函数来初始化这些成员。
当构造函数声明为explicit时,可以防止在需要隐式转换的上下文中使用构造函数。
每个派生类构造函数除了初始化自己的数据成员以外,还要初始化基类成员,但是只能初始化直接基类的成员。直接基类就是在派生类列表中指定的类。
派生类执行构造函数时,先执行基类的构造函数,然后初始化派生类中的成员。
基类可以被包含在派生类的初始化列表中,从而被初始化。

析构函数用以完成资源释放。
只有删除指向动态分配对象的指针或实际对象(不是对象引用)超出作用域时,才会运行析构函数。
编译器总会合成一个析构函数。合成的析构函数按照对象创建时的逆序撤销每个非static成员。不删除指针成员所指的对象。
析构函数没有返回值,没有形参。

本文固定链接: http://2hei.net/post.html | 2hei's site

该日志由 2hei 于2008年04月08日发表在 c 分类下,
原创文章转载请注明: 构造函数和析构函数 | 2hei's site

报歉!评论已关闭.