一:类的构造函数

1.构造函数定义
类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。
构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。
构造函数主要用于为对象分配空间,进行初始化。
2.性质
(1)构造函数的名字必须与类名相同
(2)构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。
(3)构造函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。
(4)构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。
(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。 
3.实例

#include <iostream>using namespace std;class Line
{public:void setLength( double len );double getLength( void );Line();  // 这是构造函数private:double length;
};// 成员函数定义,包括构造函数
Line::Line(void)
{cout << "Object is being created" << endl;
}void Line::setLength( double len )
{length = len;
}double Line::getLength( void )
{return length;
}
// 程序的主函数
int main( )
{Line line;// 设置长度line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl;return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Object is being created
Length of line : 6

带参数的构造函数
默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值,如下面的例子所示:

#include <iostream>using namespace std;class Line
{public:void setLength( double len );double getLength( void );Line(double len);  // 这是构造函数private:double length;
};// 成员函数定义,包括构造函数
Line::Line( double len)
{cout << "Object is being created, length = " << len << endl;length = len;
}void Line::setLength( double len )
{length = len;
}double Line::getLength( void )
{return length;
}
// 程序的主函数
int main( )
{Line line(10.0);// 获取默认设置的长度cout << "Length of line : " << line.getLength() <<endl;// 再次设置长度line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl;return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Object is being created, length = 10
Length of line : 10
Length of line : 6

使用初始化列表来初始化字段

Line::Line( double len): length(len)
{cout << "Object is being created, length = " << len << endl;
}
上面的语法等同于如下语法:
Line::Line( double len)
{length = len;cout << "Object is being created, length = " << len << endl;
}
假设有一个类 C,具有多个字段 X、Y、Z 等需要进行初始化,同理地,您可以使用上面的语法,只需要在不同的字段使用逗号进行分隔,如下所示:
C::C( double a, double b, double c): X(a), Y(b), Z(c)
{....
}

二:类的析构函数

1.析构函数的定义
类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。
析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

2.性质
(1)析构函数与构造函数名字相同,但它前面必须加一个波浪号(~);
(2)析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;
(3)当撤消对象时,编译系统会自动地调用析构函数。
3.实例

#include <iostream>using namespace std;class Line
{public:void setLength( double len );double getLength( void );Line();   // 这是构造函数声明~Line();  // 这是析构函数声明private:double length;
};// 成员函数定义,包括构造函数
Line::Line(void)
{cout << "Object is being created" << endl;
}
Line::~Line(void)
{cout << "Object is being deleted" << endl;
}void Line::setLength( double len )
{length = len;
}double Line::getLength( void )
{return length;
}
// 程序的主函数
int main( )
{Line line;// 设置长度line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl;return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Object is being created
Length of line : 6
Object is being deleted

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

  1. php中类的构造函数和析构函数,php面向对象-构造函数和析构函数详解

    php面向对象中构造函数(__construnct)和析构函数详解(__destruct) //在实际运用中构造函数的作用可以用来给属相初始化值,或初始化操作,话不啰嗦,例子更能形象说明: class ...

  2. C++ 构造函数和析构函数 详解

    目录 概述 构造函数的分类 1. 无参(默认)构造函数 2. 有参构造函数 3. 委托构造函数 4. 复制(拷贝)构造函数 5. 移动构造函数 构造函数调用规则 析构函数 概述 C++中用构造函数和析 ...

  3. java构造方法重载_Java 重载、重写、构造函数的实例详解

    Java 重载.重写.构造函数的实例详解 方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定 ...

  4. colsure php_PHP_PHP中Closure类的使用方法及详解,Closure,匿名函数,又称为Anonym - phpStudy...

    PHP中Closure类的使用方法及详解 Closure,匿名函数,又称为Anonymous functions,是php5.3的时候引入的.匿名函数就是没有定义名字的函数.这点牢牢记住就能理解匿名函 ...

  5. php自动加载类与路由,PHP实现路由与类自动加载步骤详解

    这次给大家带来PHP实现路由与类自动加载步骤详解,PHP实现路由与类自动加载步骤详解的注意事项有哪些,下面就是实战案例,一起来看一下. 项目目录如下 入口文件index.php<?php def ...

  6. C++友元函数和友元类(C++ friend)详解

    在看VISP视觉库的时候遇到友元函数: Friends void swap (vpDetectorAprilTag &o1, vpDetectorAprilTag &o2) 在定义一个 ...

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

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

  8. Java类的加载过程详解 面试高频!!!值得收藏!!!

    受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话: 八小时内谋生活,八小时外谋发展. 望别日与 ...

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

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

最新文章

  1. Hadoop: MapReduce2的几个基本示例
  2. 理解Vue 2.5的Diff算法
  3. VisualStudio运行C++项目检测include<stdio.h>报错解决方案
  4. mysql给用户授权最大_mysql 给用户授权
  5. 信号与信号分解理解总结
  6. 水表多标签训练问题总结
  7. Node.js 8有哪些重要功能和修复? 1
  8. 天啊!才几天没去看新闻,WinCE就有这么“爆炸”的新闻了?
  9. 抽象代数的人间烟火——北航李尚志
  10. S60 v1、v2和v3的区别
  11. windows快捷健总结
  12. 标品与非标品的定义 标品与非标品的区别,以及标品与非标品直通车运营方案
  13. 组合数学与计算机科学书籍,计算机科学丛书:组合数学(原书第5版)
  14. 从墨刀上下载下来的原型html如何直接作为demo展示
  15. 2021年全球便携式电动车辆行业调研及趋势分析报告
  16. html中div排版布局
  17. 客户服务呼叫中心解决方案
  18. hacking 麦步手表之(2)命令行编译工程
  19. VBA自动生成excel的表单及链接的方法
  20. java入门基础-数组

热门文章

  1. 《剑指offer》第四十九题(丑数)
  2. [中英对照]How PCI Works | PCI工作原理
  3. bmp文件格式详细解析
  4. 在brew开发中遇到的一些问题
  5. Quartus中常见错误·
  6. 理解随机森林:基于Python的实现和解释
  7. Attaching to process 29139 Could not attach to process.
  8. 一份比较详细的 webpack 4.x 手工配置基础开发环境 附源码
  9. Vue creatElement
  10. html回顾随笔JS(*^__^*)