对C++中的构造函数和析构函数的说明
2014-10-11 10:09
190 查看
在C++中使用构造函数来处理对象的初始化,构造函数的名字必须与类名相同,并且构造函数不具有任何类型,不返回任何值。析构函数是一个特殊的成员函数,其作用于构造函数相反,但其并不是删除对象,而是在撤销对象所占用的内存之前完成一些清理工作。因为析构函数不能被重载,所以一个类中可以有多个构造函数,但只能有一个析构函数。
下面举一个简单的例子来说明构造函数和析构函数的执行顺序#include <string>
#include <iostream>
using namespace std;
class Student { //声明一个Student类
public:
Student(int n , string nam , char s); //声明构造函数
~Student(){ //声明析构函数,并在函数体中输出调用信息
cout << "Destructor called." << num << endl;
}
void display() ; //声明一个输出类
private:
int num; //声明3个成员变量
string name;
char sex;
};
Student :: Student(int n , string nam , char s) { //构造函数的初始化
num = n;
name = nam;
sex = s;
cout << "Constructor called." << num << endl ;
}
void Student :: display() {
cout << "num: " << num << endl;
cout << "name: " << name << endl;
cout << "sex: " << sex << endl;
}
int main(int argc, char* argv[])
{
Student student1(01 , "xu" , 'n'); //创建对象student1
student1.display();
Student student2(02 , "zhang" , 'n'); //创建对象student2
student2.display();
return 0;
}
可以看到输出结果,首先student1的构造函数被调用,然后是student1的输出函数,在接着是student2的构造函数和其输出函数。值得注意的是析构函数的调用顺序,通过输出可以看出,student2的析构函数首先被调用,最后调用的是student2的析构函数。这正是先购造的后析构,后构造的先析构,这类似于栈的操作。
下面举一个简单的例子来说明构造函数和析构函数的执行顺序#include <string>
#include <iostream>
using namespace std;
class Student { //声明一个Student类
public:
Student(int n , string nam , char s); //声明构造函数
~Student(){ //声明析构函数,并在函数体中输出调用信息
cout << "Destructor called." << num << endl;
}
void display() ; //声明一个输出类
private:
int num; //声明3个成员变量
string name;
char sex;
};
Student :: Student(int n , string nam , char s) { //构造函数的初始化
num = n;
name = nam;
sex = s;
cout << "Constructor called." << num << endl ;
}
void Student :: display() {
cout << "num: " << num << endl;
cout << "name: " << name << endl;
cout << "sex: " << sex << endl;
}
int main(int argc, char* argv[])
{
Student student1(01 , "xu" , 'n'); //创建对象student1
student1.display();
Student student2(02 , "zhang" , 'n'); //创建对象student2
student2.display();
return 0;
}
可以看到输出结果,首先student1的构造函数被调用,然后是student1的输出函数,在接着是student2的构造函数和其输出函数。值得注意的是析构函数的调用顺序,通过输出可以看出,student2的析构函数首先被调用,最后调用的是student2的析构函数。这正是先购造的后析构,后构造的先析构,这类似于栈的操作。
相关文章推荐
- 关于C++中构造函数的说明
- C++面向对象编程入门:构造函数与析构函数(二)
- C++的构造函数和析构函数
- C++特性探寻-构造函数和析构函数
- C++特性探寻-构造函数和析构函数
- C++学习体会--构造函数,析构函数,拷贝构造函数
- C++基础--构造函数与析构函数
- C++面向对象编程入门:构造函数与析构函数(七)
- c++ 构造函数,复制构造函数,赋值构造函数,析构函数调用时机
- C++学习摘要之二:构造函数和析构函数
- C++面向对象编程入门:构造函数与析构函数(七)
- C++面向对象编程入门:构造函数与析构函数(六)
- C++学习笔记(5)——基类、派生类的构造函数、析构函数的调用顺序
- C++总结(三):构造函数和析构函数
- C++面向对象编程入门:构造函数与析构函数(四)
- 关于C++中构造函数的说明
- 高质量C++/C编程指南 -- 第9章 类的构造函数、析构函数与赋值函数
- C++中静态构造函数和静态析构函数的模拟
- 高质量C++/C编程指南 - 第9章 类的构造函数、析构函数与赋值函数
- [c/c++]构造函数、析构函数中可不可以抛出异常