class变量的构造函数的函数名与类名相同,定义class变量时自动执行
class变量的析构函数的函数名与类名前加“~”,对象超出定义范围时自动执行
//构造函数和析构函数示例
#include<stdio.h>
class X{
int i;
public:
X(); //构造函数
~X(); //析构函数
F();
};
X::X(){
printf("run X::X()\n");
}
X::~X(){
printf("run X::~X()\n");
}
X::F(){
printf("run X::F()\n");
}
int main(){
X a; //在定义变量a时自动执行 构造函数X()
//! a.X(); //不能主动调用构造函数
a.~X(); //可主动调用析构函数
a.F(); //正常函数
return 0; //程序结束后,自动调用析构函数
}
以上代码执行结果见下
定义一个对象时,自动调用了构造函数;程序结束时,自动调用析构函数;构造函数无法被外部调用,但析构函数可以。
/当对象超出它的定义范围时,编译器自动调用析构函数
//:CONSTR1.CPP-Constructors & destructors
#include<stdio.h>
class tree{
int height;
public:
tree(int initialHeight);
~tree();
void grow(int years);
void printsize();
};
tree::tree(int initialHeight){
height=initialHeight;
}
tree::~tree(){
puts("inside tree destructors");
printsize();
}
void tree::grow(int years){
height+=years;
}
void tree::printsize(){
printf("tree height is %d\n",heght);
}
main(){
puts("before opening brace");
{
tree t(12);
put("after tree creation");
t.printsize();
t.grow(4);
puts("before closing brace");
}
puts("after closing brace");
}
//:CONSTR1.CPP-Constructors & destructors
#include<stdio.h>
class tree{
int height;
public:
tree(int initialHeight);
~tree();
void grow(int years);
void printsize();
};
tree::tree(int initialHeight){
height=initialHeight;
}
tree::~tree(){
puts("inside tree destructors");
printsize();
}
void tree::grow(int years){
height+=years;
}
void tree::printsize(){
printf("tree height is %d\n",height);
}
main(){
puts("before opening brace");
{
tree t(12);
puts("after tree creation");
t.printsize();
t.grow(4);
puts("before closing brace");
}
puts("after closing brace");
}
执行结果:
这段代码的对象在“{}”内定义,其生存周期是在这个花括号内,当回收这个变量时自动执行析构函数。