C++语法:构造函数以及析构函数

目录

    • 定义
    • 主要特点
    • C++的构造函数定义格式
      • 示例1:不带参数的构造函数
      • 示例2:带参数的构造函数
      • 示例3:使用初始化列表来初始化字段
    • 类的析构函数

定义

构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。

主要特点

1.构造函数的命名必须和类名完全相同。
2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。
3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略
5.构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放

C++的构造函数定义格式

C++语言为类提供的构造函数可自动完成对象的初始化任务,全局对象和静态对象的构造函数在main()函数执行之前就被调用,局部静态对象的构造函数是当程序第一次执行到相应语句时才被调用。然而给出一个外部对象的引用性声明时,并不调用相应的构造函数,因为这个外部对象只是引用在其他地方声明的对象,并没有真正地创建一个对象。

class <类名>
{
public:
<类名>(参数表);
//...(还可以声明其它成员函数)
};
<类名>::<函数名>(参数表)
{
//函数体
}

示例1:不带参数的构造函数

#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

示例2:带参数的构造函数

#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

示例3:使用初始化列表来初始化字段

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

参考:

https://www.runoob.com/cplusplus/cpp-constructor-destructor.html
https://baike.baidu.com/item/%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0/7478717?fr=aladdin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大学各系男生追MM的专业短信

环卫系 天气预报&#xff1a;今天凌晨到白天有时有想你&#xff0c;下午转大到暴想&#xff0c;预计心情将由此降低五度。受延长低气压带影响&#xff0c;预计此类天气将持续到见到你为止。 历史系 据说最早的爱情诗是这样写的&#xff1a;你来自云南元谋&#xff0c;我来自北京…

scala中命名参数函数_Scala中带有命名参数的函数

scala中命名参数函数具有命名参数的函数 (Functions with named arguments ) A function is Scala can take multiple arguments. These arguments are traditionally called in sequence while calling a function. But in Scala programming, the program is given the power…

【IT笔试面试题整理】 二叉树任意两个节点间最大距离

求一个二叉树中任意两个节点间的最大距离&#xff0c;两个节点的距离的定义是这两个节点间边的个数&#xff0c; 比如某个孩子节点和父节点间的距离是1&#xff0c;和相邻兄弟节点间的距离是2&#xff0c;优化时间空间复杂度。 一种是&#xff1a;经过根节点&#xff0c;此时只…

请问染色浴比对染色性能有影响吗?浴比对染色的哪些性能有影响?染色亲和力测定有哪些实际应用意义

2.6 染色热力学参数 染色热、染色熵测定方法 请问染色浴比对染色性能有影响吗&#xff1f;浴比对染色的哪些性能有影响&#xff1f;染色亲和力测定有哪些实际应用意义&#xff1f; 答&#xff1a;浴比&#xff0c;又称液比。指纺织品与染液等的重量比例&#xff0c;即被染物重…

php排序地区,怎么在php项目中实现一个地区分类排序算法

怎么在php项目中实现一个地区分类排序算法发布时间&#xff1a;2020-12-30 16:11:30来源&#xff1a;亿速云阅读&#xff1a;86作者&#xff1a;Leah怎么在php项目中实现一个地区分类排序算法&#xff1f;相信很多没有经验的人对此束手无策&#xff0c;为此本文总结了问题出现的…

OpenCV实战【2】HOG+SVM实现行人检测

目录HOG是什么&#xff1f;HOG vs SIFTHOG步骤HOG在检测行人中的方式Opencv实现HOGDescriptor的构造函数&#xff1a;行人检测HOGSVM步骤简化版的HOG计算HOG是什么&#xff1f; 方向梯度直方图( Histogram of Oriented Gradient, HOG )特征是一种在计算机视觉和图像处理中用来进…

wchar_t 和 char

#include <windows.h> #include <stdio.h> //function: charTowchar //purpose:char to WCHAR 、wchar_t、LPWSTR etc void charTowchar(const char *chr, wchar_t *wchar, int size) { MultiByteToWideChar( CP_ACP, 0, chr, strlen(chr)…

坐标转换 计算机图形学_计算机图形学的转换类型

坐标转换 计算机图形学什么是转型&#xff1f; (What is Transformation?) Transformation refers to the mathematical operations or rules that are applied on a graphical image consisting of the number of lines, circles, and ellipses to change its size, shape, o…

win2003 IIS6配置PHP 5.3.3(fastCGI方式+eAccelerator)+ASP.NET 4.0(MVC3)

win2003 IIS6配置PHP 5.3.3(fastCGI方式eAccelerator)ASP.NET 4.0(MVC3) 直入正题。 这个环境的部署很有讲究&#xff0c;折腾了一天&#xff0c;大概说一下思路&#xff1a; 自从哪个PHP的版本开始&#xff08;5.2也不知道多少&#xff09;&#xff0c;就分了thread-safe版和n…

03-图像特效

一、灰度处理 方法一&#xff1a;imread方法 彩色图的颜色通道为3&#xff0c;即RGB&#xff1b;而灰度图只有一个颜色通道。 import cv2 img0 cv2.imread(E:\Jupyter_workspace\study\data/cat.png,0) img1 cv2.imread(E:\Jupyter_workspace\study\data/cat.png,1) print…

解析linux根文件系统的挂载过程

------------------------------------------ 本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------ 一&#xff1a;前言前段时间在编译kernel的时候发现rootfs挂载不上。相同的root选项设置旧版的image却可以。为了…

SIFT讲解(SIFT的特征点选取以及描述是重点)

目录SIFT是什么&#xff1f;尺度空间理论SIFT特征点提取SIFT特征点描述SIFT是什么&#xff1f; SIFT ,即尺度不变特征变换( Scale-invariant feature transform&#xff0c;SIFT) ,一种特征描述方法。具有 尺度鲁棒性 旋转鲁棒性 光照鲁棒性 SIFT本身包括了特征点筛选及特征点…

操作系统多线程实现_操作系统中的线程实现

操作系统多线程实现Each process has an address space. There is one thread of control in every traditional OS. Sometimes, it is viable to have multiple threads of control in the similar address space which is running in quasi-parallel. Though they were separ…

mysql怎么消除冗余,mysql剔除冗余数据

mysql删除冗余数据-- -- 1. 查询冗余数据SELECT t.id FROM t_lifeservice_orders t WHERE t.orderStatus 2 GROUP BY t.channelCode, t.orderNum, t.orderStatus HAVING COUNT(t.orderStatus) > 1;-- -- 2. 定义删除冗余数据存储过程DROP PROCEDURE IF EXISTS proc_delete_…

04-图像的形状绘制

一、线段绘制 cv2.line(dst,(100,100),(400,400),(0,0,255),2,cv2.LINE_AA) 参数一&#xff1a;目标图片数据 参数二&#xff1a;当前线段绘制的起始位置&#xff08;也就是两点确定一条直线&#xff09; 参数三&#xff1a;当前线段绘制的终止位置&#xff08;也就是两点确定…

(1-e^(-j5w))/(1-e^(-jw))=e^(-j2w)*sin(5w/2)/sin(w/2)的证明过程

问题出现&#xff1a;《数字信号处理第三版》第90页刘顺兰版 最后一步怎么得到的&#xff1f; 思路&#xff1a;观察答案&#xff0c;有一个自然对数项。关键就是如何提取出这一项。 我的证明过程如下&#xff1a; 参考链接&#xff1a; 【和差化积】

php 移植 arm 精简,php5.4.5移植到arm-linux摘要,lighttpd配置

php5.4.5移植到arm-linux摘要.因为有嵌入WEB服务的需求&#xff0c;再常识了N多的开源的嵌入服务后最终选择了lighttpd.Apache太大支了&#xff0c;而且在arm上对swf的支持不好.其他的都不怎么理想.lighttpd的移植过程就省略了。这里只摘要了PHP移植,采用fastcgi与lighttpd 协作…

05-图像的美化

一、彩色图片直方图 cv2.calcHist([image],[0],None,[256],[0.0,255.0]) 该方法的所有参数都必须用中括号括起来&#xff01;&#xff01;&#xff01; 参数一&#xff1a;传入的图片数据 参数二&#xff1a;用于计算直方图的通道&#xff0c;这里使用的是灰度直方图&#xff…

java 检查目录是否存在_如何检查Java目录是否存在?

java 检查目录是否存在We are using the File class that is an abstract representation of file and directory path. To check if a directory exists we have to follow a few steps: 我们正在使用File类 &#xff0c;它是文件和目录路径的抽象表示。 要检查目录是否存在&a…

Eclipse for android 中设置java和xml代码提示功能(转)

1、设置 java 文件的代码提示功能 打开 Eclipse 依次选择 Window > Preferences > Java > Editor - Content Assist > Auto activation triggers for Java &#xff0c;设置框中默认是一个点&#xff0c; 现在将它改为&#xff1a; 以下为引用内容&#xff1a; .a…