c++ 构造函数和析构函数详解
来源:互联网 发布:csol mac版 编辑:程序博客网 时间:2024/06/12 00:09
一、构造函数
1、构造函数的特点
(1)构造函数是类的一个特殊的成员函数,函数名与类名相同;
(2)构造函数的访问属性应该是公有(public)访问属性;
(3)构造函数的功能是对对象进行初始化,因此在构造函数中只能对数据成员做初始化,这些数据成员一般为私有成员,在构造函数中一般不做初始化以外的事情;
(4)构造函数可以在类内定义也可以在类外定义;
(5)构造函数无函数返回类型。注意:是什么也不写,也不可写void;
(6)在程序运行时,当新的对象被建立,该对象所属的类的构造函数自动被调用,在该对象生存期中也只调用这一次。
(7)构造函数可以重载。类中可以有多个构造函数,它们由不同的参数表区分,系统在自动调用时按一般函数重载的规则选一个执行。
2、使用初始化表来实现对数据成员的初始化
初始化表的一般格式:
类名::构造函数名(参数列表):初始化表
{
构造函数其他实现代码
}
初始化表的格式:
对象成员1(参数名或常量),对象成员2(参数名或常量),……对象成
员n(参数名或常量)
例如:定义的构造函数可以改用以下形式:
Cdate:: Cdate(int y, int m,int d): year(y), month(m),day(d){ }
注意:这种写法方便、简洁。许多C++程序员喜欢用这种方式初始化所有的数据成员。除了构造函数可以使用初始化表外,类的其他成员函数也可以根据需要使用初始化表。
3、组合类的构造函数初始化
类对象内部嵌套类对象,被嵌套的对象成为内嵌对象。内嵌对象是该类对象的组成部分,当创建该对象时,其内嵌对象也被自动创建。
C++中通过构造函数的初始化表为内嵌对象初始化。组合类的带有初始化表的狗仔函数的定义格式为:
类名::构造函数名(全部参数表):内嵌对象1(参数表1),内嵌对象2(参数表2),...
{ 构造函数体 };
声明格式为:
类名::构造函数名(全部参数表);
组合类构造函数的执行顺序为:
1)按内嵌对象的声明顺序依次调用内嵌对象的构造函数;
2)执行组合类本身的构造函数。
二、析构函数
1、析构函数的作用
析构函数是一个特殊类成员函数,它的作用与构造函数相反。析构函数的作用是在对象生存期结束之前自动执行,做清理工作。
例如:
一个类可能在构造函数中分配资源,这些资源要在对象的生存期结束
以前释放,释放资源的工作就是自动调用类的析构函数完成的。
2、析构函数的特点
(1)析构函数函数的名字特别,是类名加“~”字符,表明它与构造函数相反;
(2)析构函数没有参数,不能指定返回值类型;
(3)一个类中只能定义一个析构函数,所以析构函数不能重载;
(4)在对象生存期结束时,系统自动调用析构函数。
- 构造函数和析构函数【c++】
- [c++]构造函数和析构函数
- 【C#】构造函数和析构函数
- 【C++】构造函数和析构函数
- 【C++】构造函数和析构函数
- C++:构造函数和析构函数
- <C++>析构函数、虚析构函数和构造函数
- 【C/C++】构造函数和析构函数
- C/C++——构造函数和析构函数
- C/C++——构造函数、复制构造函数和析构函数的执行时刻
- c++ 构造函数和析构函数详解
- php面向对象-构造函数和析构函数详解
- C++对象的构造函数和析构函数详解
- c++构造函数和析构函数详解
- C++_构造函数和析构函数
- C#の构造函数和析构函数
- C++_构造函数和析构函数
- 学习C++——构造函数和析构函数
- 今年暑假不ac (c语言版)
- Spring事务属性详解
- php 的几个好用的header
- Ubuntu下Nox编译make不通过的解决方法和简要安装过程
- C++中string的成员函数
- c++ 构造函数和析构函数详解
- 设计模式中类的关系
- What are training set, validation set and test set?
- Qt一些小技巧(一)
- backtrack - linux 简介
- Unity3D: JavaScript->C# 或 C#->JavaScript的调用
- 一个分号引发的血案-ECShop搬家后打开网页空白的解决过程
- static final 对象要慎用
- 结构体和函数