一、构造函数

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. 函数名与类名相同。
  2. 无返回值。
  3. 对象实例化编译器自动调用对应的构造函数。
  4. 构造函数可以重载
    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;
}

无参的构造函数和全缺省的构造函数都称为构造函数,并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认成员函数。
二、析构函数
析构函数:与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。

析构函数是特殊的成员函数。
特征:

  1. 析构函数名是在类名前加上字符 ~ 。
  2. 无参数五返回值。
  3. 一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。
  4. 对象生命周期结束时,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;
};

类的构造函数和析构函数相关推荐

  1. c++派生类和基类的构造函数和析构函数

    基类和派生类的构造函数顺序,先调用基类的构造函数,在调用派生类的构造函数, 析构函数而言,先调用派生类的析构函数,再调用基类的析构函数 #include<iostream> using n ...

  2. php 派生类 构造,C++派生类的构造函数和析构函数

    派生类对象中包含基类对象,因此派生类对象在创建时,除了要调用自身的构造函数进行初始化外,还要调用基类的构造函数初始化其包含的基类对象.因此,程序中任何能够生成派生类对象的语句,都要说明其包含的基类对象 ...

  3. 类中构造函数、析构函数与赋值函数的重写

    类中构造函数.析构函数与赋值函数的重写 class String { public: String(const char *str = NULL); // 普通构造函数 String(const St ...

  4. C++派生类的构造函数和析构函数

    C++派生类的构造函数和析构函数 派生类的构造函数和析构函数 #include <iostream> using namespace std; class student { public ...

  5. C++类的构造函数、析构函数与赋值函数

    C++类的构造函数.析构函数与赋值函数 构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和 ...

  6. 实验名称: 类的构造函数、析构函数和友员成员应用

    实验四 (实验课时:2  实验性质:设计) 实验名称:  类的构造函数.析构函数和友员成员应用 实验目的: (1)练习类的构造函数.析构函数的定义和使用方法: (2)练习对象数组.对象指针的使用: ( ...

  7. c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]

    说明:文章中关于operator=实现的示例,从语法上是对的,但逻辑和习惯上都是错误的. 参见另一篇专门探究operator=的文章:<c++,operator=>http://www.c ...

  8. C++中基类与派生类的构造函数和析构函数

    1.Cpp中的基类与派生类的构造函数 基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承.构造函数不能被继承是有道理的,因为即使继承了,它的名字和 ...

  9. php中类的构造函数是,PHP 类的构造函数和析构函数

    通常一提到 PHP 的构造函数和析构函数,就会想到两个单词 construct 和 destruct,构造和解构. 在学习 PHP 的时候,了解到的构造函数和析构函数就是 __construct() ...

  10. 类的构造函数和析构函数详解

    一:类的构造函数 1.构造函数定义 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行. 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void.构造函数可 ...

最新文章

  1. AI隐形衣:穿上这件连帽衫,监控算法对你“视而不见”
  2. 算法导论 c语言,算法导论 之 堆排序[C语言]
  3. python教程:深copy浅copy
  4. Ehcarts 与 百度地图结合时,如何获取bmap的实例对象?
  5. 构建简单的微服务架构
  6. ffmpeg的内部Video Buffer管理和传送机制
  7. js面向对象的程序设计 --- 中篇(创建对象) 之 原型模式
  8. 1296: [SCOI2009]粉刷匠
  9. 高德地图全解析--定位篇
  10. Python - 常用库 - OpenCC(中文繁简体转换)
  11. 35岁以后你还能干嘛?
  12. 产品设计体会(0013)产品经理应该是管理者么
  13. MongoDB:shutting down with code:100
  14. TCP/IP(十一)TCP滑动窗口和拥塞控制
  15. 第五十五讲 插件设备树
  16. Eclipse安装内存分析工具(Memory Analyzer)
  17. 您有一篇Maven 常用命令的文章,请注意查收!
  18. 数据库Oracle基本命令
  19. Python 用print打印五彩斑斓、花里胡哨的文字,让你的print骚起来。
  20. 如何用Tensorboard工具查看Loss损失率

热门文章

  1. python 语言基础 - 你不得不知道的字符串常用函数之lowerupper
  2. PLC串级PID控制详解(炉膛和中央空调系统控温)
  3. 大一大学计算机心得,大一计算机学习心得感悟
  4. C语言——恐怖水母(贪心算法)
  5. 明治乳业在中国市场推出全新益生菌酸奶--“明治佰乐益优”系列
  6. 穷人和富人的十三大经典差异
  7. 保护用户隐私安全,基于OAID进行个性化广告推荐
  8. python自动化的实践笔记
  9. shader Blend混合模式讲解
  10. 哈罗python的学费多少-哈啰出行招聘Java、算法、大数据开发、安卓、iOS、运维架构专家/高级专家等...