面向对象——构造函数与析构函数
程序员文章站
2024-03-17 16:18:16
...
构造函数
- 主要作用
用于建立对象时,为对象的数据成员提供初始初始值(数据成员初始化) - 定义语法
基本要素:
(1) 函数名
(2) 参数列表
(3) 返回类型
(4) 函数体(函数实现)
class X{ ……
X(…){…} //构造函数
……
}
-
调用形式和时机
**调用形式:有参: 类名 对象名(实参列表); 无参: 类名 对象名;
-
调用时机: 在定义对象时,由编译系统自动调用!
系统将根据“参数列表”调用某个构造函数; 若无参数列表将调用不需要参数的构造函数;
-
特点及注意事项
1、构造函数与类同名:类名( )
2、构造函数没有(无)返回类型
3、构造函数可以被重载(无参+有参)
4、构造函数由编译系统自动调用,不允许程序员显式调用。
5、构造函数通常应定义为公有成员
6、定义对象数组或用new创建动态对象时,也要调用构造函数。但定义数组对象时,必须有不需要参数的构造函数
#include <iostream>
using namespace std;
class Desk{
public:
Desk(int, int, int, int); //构造函数声明
void setWeight(int w) { weight=w; } //成员函数(内部)定义
private:
int weight, length, width, high;
};
Desk::Desk(int ww,int l,int w,int h) { //构造函数(外部)定义
weight=ww; high=l;
width=w; length=h;
cout<<"call constructor !"<<endl;
}
int main(){
Desk d1(2,3,3,5); //实例化一个对象(隐式调用构造函数)
}
析构函数
-
主要作用
用于对象生命期结束时,回收对象(分配的内存空间) -
定义语法
class X{ ……
~X(){…} //析构函数
……
}
}
-
调用形式和时机
**调用形式:
用户不能调用析构函数; -
调用时机: 对象生命期结束时, 编译系统将自动调用
自动/局部对象:定义的语句块结束处 全局对象:程序结束时 静态对象:程序结束时
-
特点及注意事项
1、析构函数名为:~类名( )
2、析构函数没有(无)返回类型
3、析构函数没有(无)参数,不能被重载:每个类仅有一个析构函数
4、构造函数由编译系统自动调用,不允许程序员显式调用。
5、若有多个对象同时结束生存期,C++将按照与调用构造函数相反的次序调用析构函数。
6、 每个类都应该有一个析构函数,如果没有显式定义析构函数。C++将产生一个最小化的默认析构函数。即: ~类名( ){ } //什么都不做的析构函数
7、构造函数和析构函数都可以是inline内联函数
8、 在通常情况下,析构函数与构造函数都应该被设置为类的公有成员。
用析构函数释放构造函数中分配的*存储空间
#include <iostream>
using namespace std;
class B{
private:
int *a; char *pc;
public:
inline B(int x){ //构造函数
a=new int[10]; pc=new char; //分配*存储空间
}
inline ~B(){ //析构函数
delete []a; delete pc; //释放*存储空间
}
};
int main(){
B x(1);
}
上一篇: [CCF] 201412-2 Z字形扫描 Apare_xzc
下一篇: 37 函数的定义和调用