您的位置:首页 > 编程语言 > C语言/C++

c++知识学习 (2)

2014-01-08 18:27 316 查看
析构函数

析构函数是在对象所占内存释放时调用的,通常用来释放相关的资源。

析构函数就是一个特殊的类成员函数,与构造函数相反。

析构函数的名字是在类名前面加上波浪线~。

它不返回任何值也没有任何参数,不能被重载。

类如:

~Person()

Person.h

//
//  Person.h
//  ArrayTest
//
//  Created by 张学院 on 14-1-8.
//  Copyright (c) 2014年 com.mix. All rights reserved.
//

//防止重复引用
#ifndef __ArrayTest__Person__
#define __ArrayTest__Person__

#include <iostream>
using namespace std;
class Person{
//---------成员变量--------
public :

int age;

private :
int weight;
char  * name;
char sex;
//---------成员方法--------
public:
//----构造函数-------
Person();
//-----构造函数重载-----
Person(int age);

void setWeight(int weight);
int getWeight() const;
//char * getName() const;
//const 指针,保证指针不被修改
const char * getName() const;

void info() const;
~Person();
};
#endif /* defined(__ArrayTest__Person__) */


Person.cpp

//
//  Person.cpp
//  ArrayTest
//
//  Created by 张学院 on 14-1-8.
//  Copyright (c) 2014年 com.mix. All rights reserved.
//

#include "Person.h"
//------方法实现格式------
//----返回值 类::方法名 (参数)------
void Person::setWeight(int weight){
//-----this 代表
this->weight=weight;
}
//--------const 编译限制-------
int  Person::getWeight() const{
//weight++;报错
return weight;
}
const char * Person::getName() const{

return name;

}

void Person::info() const{

printf("%s\n%d\n%c\n%d\n",name,age,sex,weight);
}
//--------构造函数:初始化成员变量------------
Person::Person(){
printf("call the functon Person()\n");
//name 改成指针的时候 name 没有有效地址 。strcpy 报错
//strcpy(name, "a man");
//在堆里分配内存,返回首地址,在堆里面分配的空间一定要记得释放内存!!!!!
name = new char[255];
strcpy(name, "a man");
weight=60;
age=20;
sex='m';
}
//--------构造函数:重载------------
Person::Person(int age){
printf("call the functon Person(int age)\n");
//name 改成指针的时候 name 没有有效地址 。strcpy 报错
//strcpy(name, "a man");
name = new char[255];
strcpy(name, "a man");
weight=60;
this->age=age;
sex='m';

}

//-----------析构函数---------
Person::~Person(){
//在析构函数里面释放内存
delete [] name;
printf("call the functon ~Person()析构函数 \n");
}


main.cpp

//
//  main.cpp
//  ArrayTest
//
//  Created by 张学院 on 14-1-6.
//  Copyright (c) 2014年 com.mix. All rights reserved.
//

#include <iostream>

#include <string>
#include "Person.h";
int main()
{
//---栈分配:函数结束,per出栈,内存释放之前,调用析构函数-------
Person per= Person();
per.info();

//-----堆分配:必须手动是否内存-------

Person *per1= new Person();
per1->info();

//不调用delete  per1;不会调用析构函数
delete  per1;
return 0;
}


输出:

call the functon Person()

a man

20

m

60

call the functon Person()

a man

20

m

60

call the functon ~Person()析构函数

call the functon ~Person()析构函数

一定要记得在释放堆中分配的内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: