一步一步学习C++(类)之构造函数与析构函数
来源:互联网 发布:方正综艺简体下载 mac 编辑:程序博客网 时间:2024/05/08 10:08
一旦创建了一个类的对象,有时候就需要有一个有意义的初始值,当对象的生命周期结束时,有时候需要释放对象的内存单元。构造函数和析构函数是两个非常特殊的函数:它们没有返回值。这与返回值为void的普通函数显然不同,虽然void 普通函数没有返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许。
在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行。如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己来显式的调用构造函数与析构函数,这样一来,安全性就被人破坏了。另外,析构函数不带任何参数,因为析构不需任何选项。
一、构造函数
在类实例化对象时自动执行,对类中的数据进行初始化。构造函数可以重载,可以有多个,但是只能有一个缺省构造函数。
二、析构函数
在撤销对象占用的内存之前,进行一些操作的函数。析构函数不能被重载,只能有一个。
#ifndef _Tstudent_H_#define _Tstudent_H_#include <string.h>#pragma onceclass Tstudent{private:char name[20];int score[2];double aver;public:Tstudent(void);Tstudent(char *stuname,int Chinese,int Math);//重载函数~Tstudent(void);void setAver(int Chinese,int Math);void SetName(char *stuname);void Print(void);};#endif
<pre name="code" class="cpp">#include "StdAfx.h"#include "Tstudent.h"#include <string.h>Tstudent::Tstudent(void){printf("Constructors被调用\n");//构造函数}Tstudent::Tstudent(char *stuname,int Chinese,int Math){strcpy(name,stuname);score[0] = Chinese;score[1] = Math;aver = (score[0] + score[1])/2;printf("构造函数被调用\n");}Tstudent::~Tstudent(void){printf("Destructors被调用\n");//构造函数}void Tstudent::SetName(char *stuname){strcpy(name,stuname);}void Tstudent::setAver(int Chinese,int Math){aver = 0;score[0] = Chinese;score[1] = Math;aver = (score[0] + score[1])/2;}void Tstudent::Print(){printf("%s\n",name);printf("%1f\n",aver);}
// DefineAndRealize.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "Point.h"#include "Tstudent.h"int _tmain(int argc, _TCHAR* argv[]){//Point M; //用定义好的类创建一个对象 点M//M.setPoint(10, 20); //设置 M点 的x,y值//M.printPoint(); //输出 M点 的信息Tstudent stu1("张三",95,97);Tstudent stu2("李四",83,92);stu1.Print();stu2.Print();Tstudent stu3;stu3.SetName("王五");stu3.setAver(98,98);stu3.Print();return 0;}
由于析构函数是等return 0;之后才会打印出来,所以上面结果没有显示完全
三、显示调用构造函数与析构函数
Tstudent *Mystudent = new Tstudent;Mystudent->~Tstudent();delete Mystudent;Constructors被调用
Destructors被调用
Destructors被调用
有时候,在对象的生命周期结束前,想先结束这个对象的时候就会派上用场了。直接调用析构函数并不释放对象所在的内存。
new的时候,其实做了三件事,一是:调用::operator new分配所需内存。二是:调用构造函数。三是:返回指向新分配并构造的对象的指针。
delete的时候,做了两件事,一是:调用析构函数,二是:调用::operator delete释放内存。
new的时候,其实做了三件事,一是:调用::operator new分配所需内存。二是:调用构造函数。三是:返回指向新分配并构造的对象的指针。
delete的时候,做了两件事,一是:调用析构函数,二是:调用::operator delete释放内存。
四、拷贝初始化构造函数
拷贝构造函数,又称复制构造函数,是一种特殊的构造函数
在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):
1) 一个对象作为函数参数,以值传递的方式传入函数体;
2) 一个对象作为函数返回值,以值传递的方式从函数返回;
3) 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);
详细的留在下一节~~
0 0
- 一步一步学习C++(类)之构造函数与析构函数
- 一步一步学习C++(类)之拷贝构造函数
- 一步一步学习C++(类)之多态性与虚函数
- 一步一步学习C++(类)之成员函数的特性
- 一步一步学习C++(类)之友元函数
- 【学习C++】学习C++ -> 构造函数与析构函数
- 【C\C++学习】之十八、C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
- c++-构造函数与析构函数
- C++--构造函数与析构函数
- 【c++】构造函数与析构函数
- C++:构造函数与析构函数
- 【面向对象】php新手之学习类与对象-构造函数与析构函数
- 反汇编学习之路之构造函数与析构函数(一)
- 构造函数与析构函数(C++)
- C++(构造函数与析构函数)
- 类之构造函数与析构函数
- (四)C#之构造函数与析构函数
- 一步一步学习C++(类)之虚函数和纯虚数
- google支付服务端订单验证PHP代码
- 随机行走
- 网络编程释疑之:TCP连接拔掉网线后会发生什么
- linux mysql密码忘记找回方法
- 九度oj 1541 二叉树
- 一步一步学习C++(类)之构造函数与析构函数
- 外部排序
- C++11中值得关注的几大变化
- 定点量化误差python仿真.频率响应(2)
- poj 1061 青蛙的约会 ex_gcd
- jQuery1.9+ 废弃的函数和方法 升级Jquery版本遇到的问题
- IO流第十二课,字节数组流与文件流对接
- Java垃圾回收机制
- 工厂模式-CaffeNet训练