c++学习笔记 析构函数
2017-03-14 22:59
260 查看
声明:注明代码出处 http://www.weixueyuan.net/view/6345.html
析构函数
在创建对象的时候系统会自动调用构造函数,在对象需要被销毁的时候同样系统会自动调用一个函数
无返回值
没有参数,不能被重载,因此一个类也只能含有一个析构函数
函数名必须为“~类名”的形式,符号“~”与类名之间可以有空格
析构函数与构造函数调用顺序是反转过来的,先调用构造函数的后调用析构函数。
#include<iostream>
using
namespace std;
class
test
{
public:
test(int
i){num
= i;cout<<num<<"
Constructor"<<endl;}
~test(){cout<<num<<"
Destructor"<<endl;}
private:
int num;
};
int
main()
{
test
t0(0);
test
t1(1);
test
t2(2);
test
t3(3);
return
0;
}
程序运行结果:
0 Constructor
1 Constructor
2 Constructor
3 Constructor
3 Destructor
2 Destructor
1 Destructor
0 Destructor
类的构造函数负责对象完成初始化及其它相关操作,而析构函数则用于销毁对象时完成相应的资源释放工作。
注意 动态申请的东西得自己销毁
有new 有delete 特别注意new多个的情况 不然会内存泄漏
#include<iostream>
using namespace std;
class Array
{
public:
Array(){length = 0; num = NULL;};
Array(int * A, int n);
Array(Array &a);//复制构造函数
void setnum(int value, int index);
int * getaddress();
void display();
int getlength(){return length;}
~Array();
private:
int length;
int * num;
};
Array::~Array()
{
if(num != NULL)
delete[] num;//new了多个 要把它给人工释放
cout<<"destructor"<<endl;
}
Array::Array(Array & a)
{
if(a.num != NULL)
{
length = a.length;
num = new int[length];//new了多个
for(int i=0; i<length; i++)
num[i] = a.num[i];
}
else
{
length = 0;
num = 0;
}
}
Array::Array(int *A, int n)
{
num = new int
;
length = n;
for(int i=0; i<n; i++)
num[i] = A[i];
}
void Array::setnum(int value, int index)
{
if(index < length)
num[index] = value;
else
cout<<"index out of range!"<<endl;
}
void Array::display()
{
for(int i=0; i<length; i++)
cout<<num[i]<<" ";
cout<<endl;
}
int * Array::getaddress()
{
return num;
}
int main()
{
int A[5] = {1,2,3,4,5};
Array arr1(A, 5);
arr1.display();
Array arr2(arr1);
arr2.display();
arr2.setnum(8,2);
arr1.display();
arr2.display();
cout<<arr1.getaddress()<<" "<<arr2.getaddress()<<endl;
return 0;
}
析构函数
在创建对象的时候系统会自动调用构造函数,在对象需要被销毁的时候同样系统会自动调用一个函数
无返回值
没有参数,不能被重载,因此一个类也只能含有一个析构函数
函数名必须为“~类名”的形式,符号“~”与类名之间可以有空格
析构函数与构造函数调用顺序是反转过来的,先调用构造函数的后调用析构函数。
#include<iostream>
using
namespace std;
class
test
{
public:
test(int
i){num
= i;cout<<num<<"
Constructor"<<endl;}
~test(){cout<<num<<"
Destructor"<<endl;}
private:
int num;
};
int
main()
{
test
t0(0);
test
t1(1);
test
t2(2);
test
t3(3);
return
0;
}
程序运行结果:
0 Constructor
1 Constructor
2 Constructor
3 Constructor
3 Destructor
2 Destructor
1 Destructor
0 Destructor
类的构造函数负责对象完成初始化及其它相关操作,而析构函数则用于销毁对象时完成相应的资源释放工作。
注意 动态申请的东西得自己销毁
有new 有delete 特别注意new多个的情况 不然会内存泄漏
#include<iostream>
using namespace std;
class Array
{
public:
Array(){length = 0; num = NULL;};
Array(int * A, int n);
Array(Array &a);//复制构造函数
void setnum(int value, int index);
int * getaddress();
void display();
int getlength(){return length;}
~Array();
private:
int length;
int * num;
};
Array::~Array()
{
if(num != NULL)
delete[] num;//new了多个 要把它给人工释放
cout<<"destructor"<<endl;
}
Array::Array(Array & a)
{
if(a.num != NULL)
{
length = a.length;
num = new int[length];//new了多个
for(int i=0; i<length; i++)
num[i] = a.num[i];
}
else
{
length = 0;
num = 0;
}
}
Array::Array(int *A, int n)
{
num = new int
;
length = n;
for(int i=0; i<n; i++)
num[i] = A[i];
}
void Array::setnum(int value, int index)
{
if(index < length)
num[index] = value;
else
cout<<"index out of range!"<<endl;
}
void Array::display()
{
for(int i=0; i<length; i++)
cout<<num[i]<<" ";
cout<<endl;
}
int * Array::getaddress()
{
return num;
}
int main()
{
int A[5] = {1,2,3,4,5};
Array arr1(A, 5);
arr1.display();
Array arr2(arr1);
arr2.display();
arr2.setnum(8,2);
arr1.display();
arr2.display();
cout<<arr1.getaddress()<<" "<<arr2.getaddress()<<endl;
return 0;
}
相关文章推荐
- C++学习笔记(17)——虚函数与构造函数、析构函数
- C++学习笔记_3:多继承时的类声明及构造和析构函数
- C++ 类的析构函数学习笔记3
- C++学习笔记-2-构造函数和析构函数
- 【菜鸟C++学习笔记】12.构造函数与析构函数
- C/C++学习笔记:String类的构造函数、析构函数和赋值函数
- [C++学习笔记]--析构函数、静态成员变量、静态成员函数
- C++学习笔记:类的析构函数
- c++学习笔记4,调用派生类的顺序构造和析构函数(一个)
- C++学习笔记1:构造函数和析构函数
- C++学习笔记25,永远将析构函数声明为virtual
- 学习笔记---C++析构函数心得
- C++学习笔记12 构造函数与析构函数下
- C++学习笔记(5)——基类、派生类的构造函数、析构函数的调用顺序
- C++ FAQ学习笔记 11 章 析构函数
- C++析构函数的作用及其定义方法的学习笔记
- C++学习笔记4--静态属性 静态方法 虚方法 抽象方法 多态性 析构函数 运算符重载 多继承 虚继承
- C++ 类的析构函数学习笔记4
- C++ 类的析构函数学习笔记5
- c++学习笔记之构造函数和析构函数