类的构造函数和析构函数
一、构造函数
1.1 概念
class Date {
public:void SetDate(int year, int month, int day) {_year = year;_month = month;_day = day;}void Display() {cout << _year << "-" << _month << "-" << _day << endl;}
private:int _year;int _month;int _day;
};int main() {Date d1;d1.SetDate(2018, 5, 1);d1.Display();Date d2;d2.SetDate(2018,7,1);d2.Display();system("pause");return 0;
}
对于Date类,可以通过SetDate公有的方法给对象设置内容,但是如果每次创建对象都调用该方法设置信息,未免优点麻烦,那能否在对象创建时,就将信息设置进去呢?
构造函数:是一个特殊的成员函数,名字和类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。
1.2 特性
构造函数时特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是需要注意的是构造函数的主要任务并不是开空间创建对象,而是初始化对象。
其特征如下:
- 函数名与类名相同。
- 无返回值。
- 对象实例化编译器自动调用对应的构造函数。
- 构造函数可以重载
1.3 使用构造函数
C++提供了两种构造函数来初始化对象的方式。第一种方式是显式地调用构造函数:
class _Date {
public:// 无参构造函数_Date() {}// 带参构造函数_Date(int year, int month, int day) {_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};
void TestDate() {_Date d1; // 调用无参构造函数_Date d2(2015, 1, 1); // 调用带参构造函数}
1.4 默认构造函数
如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。
class _Date {
public:private:int _year;int _month;int _day;
};
void Test() {// 没有定义构造函数,对象也可以创建成功,因此此处调用的是编译器生成的默认构造函数Date d;
}
无参的构造函数和全缺省的构造函数都称为构造函数,并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认成员函数。
二、析构函数
析构函数:与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。
析构函数是特殊的成员函数。
特征:
- 析构函数名是在类名前加上字符 ~ 。
- 无参数五返回值。
- 一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。
- 对象生命周期结束时,C++编译系统系统自动调用析构函数。
typedef int DataType;
class SeqList{public:SeqList(int capacity = 10) {_pData = (DataType*)malloc(capacity * sizeof(DataType));assert(_pData);_size = 0;_capacity = capacity;}~SeqList() {if (_pData) {free(_pData); // 释放堆上的空间_pData = NULL; // 将指针置为空_capacity = 0;_size = 0;}}
private:int* _pData;size_t _size;size_t _capacity;
};
类的构造函数和析构函数相关推荐
- c++派生类和基类的构造函数和析构函数
基类和派生类的构造函数顺序,先调用基类的构造函数,在调用派生类的构造函数, 析构函数而言,先调用派生类的析构函数,再调用基类的析构函数 #include<iostream> using n ...
- php 派生类 构造,C++派生类的构造函数和析构函数
派生类对象中包含基类对象,因此派生类对象在创建时,除了要调用自身的构造函数进行初始化外,还要调用基类的构造函数初始化其包含的基类对象.因此,程序中任何能够生成派生类对象的语句,都要说明其包含的基类对象 ...
- 类中构造函数、析构函数与赋值函数的重写
类中构造函数.析构函数与赋值函数的重写 class String { public: String(const char *str = NULL); // 普通构造函数 String(const St ...
- C++派生类的构造函数和析构函数
C++派生类的构造函数和析构函数 派生类的构造函数和析构函数 #include <iostream> using namespace std; class student { public ...
- C++类的构造函数、析构函数与赋值函数
C++类的构造函数.析构函数与赋值函数 构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和 ...
- 实验名称: 类的构造函数、析构函数和友员成员应用
实验四 (实验课时:2 实验性质:设计) 实验名称: 类的构造函数.析构函数和友员成员应用 实验目的: (1)练习类的构造函数.析构函数的定义和使用方法: (2)练习对象数组.对象指针的使用: ( ...
- c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]
说明:文章中关于operator=实现的示例,从语法上是对的,但逻辑和习惯上都是错误的. 参见另一篇专门探究operator=的文章:<c++,operator=>http://www.c ...
- C++中基类与派生类的构造函数和析构函数
1.Cpp中的基类与派生类的构造函数 基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承.构造函数不能被继承是有道理的,因为即使继承了,它的名字和 ...
- php中类的构造函数是,PHP 类的构造函数和析构函数
通常一提到 PHP 的构造函数和析构函数,就会想到两个单词 construct 和 destruct,构造和解构. 在学习 PHP 的时候,了解到的构造函数和析构函数就是 __construct() ...
- 类的构造函数和析构函数详解
一:类的构造函数 1.构造函数定义 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行. 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void.构造函数可 ...
最新文章
- AI隐形衣:穿上这件连帽衫,监控算法对你“视而不见”
- 算法导论 c语言,算法导论 之 堆排序[C语言]
- python教程:深copy浅copy
- Ehcarts 与 百度地图结合时,如何获取bmap的实例对象?
- 构建简单的微服务架构
- ffmpeg的内部Video Buffer管理和传送机制
- js面向对象的程序设计 --- 中篇(创建对象) 之 原型模式
- 1296: [SCOI2009]粉刷匠
- 高德地图全解析--定位篇
- Python - 常用库 - OpenCC(中文繁简体转换)
- 35岁以后你还能干嘛?
- 产品设计体会(0013)产品经理应该是管理者么
- MongoDB:shutting down with code:100
- TCP/IP(十一)TCP滑动窗口和拥塞控制
- 第五十五讲 插件设备树
- Eclipse安装内存分析工具(Memory Analyzer)
- 您有一篇Maven 常用命令的文章,请注意查收!
- 数据库Oracle基本命令
- Python 用print打印五彩斑斓、花里胡哨的文字,让你的print骚起来。
- 如何用Tensorboard工具查看Loss损失率
热门文章
- python 语言基础 - 你不得不知道的字符串常用函数之lowerupper
- PLC串级PID控制详解(炉膛和中央空调系统控温)
- 大一大学计算机心得,大一计算机学习心得感悟
- C语言——恐怖水母(贪心算法)
- 明治乳业在中国市场推出全新益生菌酸奶--“明治佰乐益优”系列
- 穷人和富人的十三大经典差异
- 保护用户隐私安全,基于OAID进行个性化广告推荐
- python自动化的实践笔记
- shader Blend混合模式讲解
- 哈罗python的学费多少-哈啰出行招聘Java、算法、大数据开发、安卓、iOS、运维架构专家/高级专家等...