当前位置: 首页 > news >正文

C++ 类构造函数 析构函数

类的构造函数

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。

下面的实例有助于更好地理解构造函数的概念:

#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)
{....
}

类的析构函数

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

下面的实例有助于更好地理解析构函数的概念:

#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

相关文章:

  • 微信小程序canvas画布图片保存到相册官方授权、自定义授权、保存
  • 部署本地GPT
  • IDEA 在本地启动多个 SpringBoot 后端服务模拟集群
  • python 抽象接口和对应关系总结
  • 区间预测 | Matlab实现BiLSTM-Adaboost-ABKDE的集成双向长短期记忆网络自适应带宽核密度估计多变量回归区间预测
  • vtk9.3 配置 visual studio 2019 运行环境 和运行实例详解
  • 低代码-添加按钮组件设计
  • OpenJDK 和 OracleJDK 哪个jdk更好更稳定,正式项目用哪个呢?关注者
  • 三、Qt Creator 使用
  • 什么是池化层?
  • mac上搭建 hadoop 伪集群
  • 序章 熟悉战场篇—了解vue的基本操作
  • Mysql 安装通过mysql installer安装+配置环境+连接可视化工具
  • Ubuntu 22.04 基础环境搭建
  • 码云星辰:未来运维的技术交响曲
  • 网络传输文件的问题
  • 收藏网友的 源程序下载网
  • [case10]使用RSQL实现端到端的动态查询
  • 【技术性】Search知识
  • AHK 中 = 和 == 等比较运算符的用法
  • Apache Pulsar 2.1 重磅发布
  • express + mock 让前后台并行开发
  • iOS 颜色设置看我就够了
  • JavaScript设计模式之工厂模式
  • laravel 用artisan创建自己的模板
  • MySQL数据库运维之数据恢复
  • Node + FFmpeg 实现Canvas动画导出视频
  • PAT A1050
  • PAT A1120
  • springboot_database项目介绍
  • Xmanager 远程桌面 CentOS 7
  • Yeoman_Bower_Grunt
  • 对超线程几个不同角度的解释
  • 记录一下第一次使用npm
  • 排序算法学习笔记
  • 山寨一个 Promise
  • 协程
  • 找一份好的前端工作,起点很重要
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define 用法
  • #FPGA(基础知识)
  • #微信小程序:微信小程序常见的配置传旨
  • $.each()与$(selector).each()
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (function(){})()的分步解析
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (算法)求1到1亿间的质数或素数
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)关于pipe()的详细解析
  • (转载)Linux 多线程条件变量同步
  • ***通过什么方式***网吧
  • *p++,*(p++),*++p,(*p)++区别?