用构造函数为对象的数据成员实现输入和输出时间

        在C++程序中,对象的初始化是一个不可缺少的重要问题。不应该让程序员在这个问题上花过多的精力,C++在类的设计中提供了较好的处理方法。
        为了解决这个问题,C++提供了构造函数(constructor)来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。构造函数是在声明类的时候由类的设计者定义的,程序用户只须在定义对象的同时指定数据成员的初值即可。
        构造函数的名字必须与类名同名,而不能任意命名,以便编译系统能识别它并把它作为构造函数处理。它不具有任何类型,不返回任何值。

编写程序:

运行结果:

程序分析:
        在类中定义了构造函数Time,它和所在的类同名。在建立对象时会自动执行构造函数,根据构造函数Time的定义,其作用是对该对象中的全部数据成员赋予初值0。请不要误认为是在声明类时直接对程序数据成员赋初值(那是不允许的),赋值语句是写在构造函数的函数体中的,只有在调用构造函数时才执行这些赋值语句,对当前对象中的数据成员赋值。
        程序运行时首先建立对象t1,在执行构造函数过程中对t1中的数据成员赋予初值0。然后再执行主函数中的t1.set_time函数,从键盘输入新值赋给对象t1的数据成员,再输出t1的数据成员的值。接着建立对象t2,同时对t2中的数据成员赋予初值0,但对t2的数据成员不再赋予新值,直接输出数据成员的初值。
        上面是在类内定义构造函数的,也可以只在类内对构造函数进行声明而在类外定义构造函数。将程序中的第5~9行改为下面一行:
        Time();                 //对构造函数进行声明
在类外定义构造函数:

        Time::Time()        //在类外定义构造成员函数,要加上类名Time和域限定符"::"
                {hour=0;
                 minute=0;
                 sec=0;

                 }
说明:有关构造函数的使用,有以下几点要注意:
        (1)什么时候调用构造函数呢?在建立类对象时会自动调用构造函数。在建立对象时系统为该对象分配存储单元,此时执行构造函数,就把指定的初值送到有关数据成员的存储单元中。每建立一个对象,就调用一次构造函数。在上面的程序中,在主函数中定义了一个对象t1,在此时,就会自动调用t1对象中的构造函数Time,使各数据成员的值为0。
        (2)构造函数没有返回值,因此也没有类型,它的作用只是对对象进行初始化。因此也不需要在定义构造函数时声明类型,这是它和一般函数的一个重要的不同之点。不能写成
        int Time()
                {...}

        void Time()
                {...}
        (3)构造函数不需用户调用,也不能被用户调用。下面用法是错误的:
        t1.Time();        //试图用调用一般成员函数的方法来调用构造函数
        构造函数是在定义对象时由系统自动执行的,而且只能执行一次。构造函数一般声
明为public。
        (4)可以用一个类对象初始化另一个类对象,如
        Time t1;             //建立对象t1,同时调用构造函数t1.Time()
        Time t2=t1;        //建立对象t2,并用一个t1初始化t2
此时,把对象t1的各数据成员的值复制到t2相应各成员,而不调用构造函数t2.Time()。
        (5)在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包含其他语句,例如cout语句。但是一般不提倡在构造函数中加入与初始化无关的内容,以保持程序的清晰。
        (6)如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。
        (7)以上介绍的构造函数是最基本的形式。构造函数有不同的形式,以便用于不同情况的数据初始化。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51单片机-温度传感器DS18B20

51单片机-温度传感器DS18B20 本文主要基于51单片机的温度传感器DS18B20开发示例的编程应用来理解开发中如何看时序图,用代码模拟时序图实现器件功能。 1.DS18B20简介 DS18B20的核心功能是它可以直接读出数字的温度数值。温度传感器的精度为用户可编程的9&#xf…

重磅丨上海容大推出“容聆”智能拾音工牌,赋能线下门店运营数字化

近日,继豚音营业厅智能质检终端之后,上海容大数字技术有限公司(简称“上海容大”)在线下面对面沟通场景下语音数据采集与智能分析领域取得了新突破,重磅推出AI智能语音工牌产品——“容聆”。 据悉,“容聆”…

python通讯录管理系统

项目演示 有偿项目,需要可以加我微信

智能制造装备业项目数字化管理之多项目管理

在智能制造装备业中,多项目管理已经成为行业发展的核心驱动力。这种管理方式从全局的视角出发,对企业内同时推进的多个项目进行精细化的全生命周期管控。这不仅仅涉及单一项目的管理,还包括项目集和项目组合管理。 根据客户需求,一…

智能视频监控平台智能边缘分析一体机安防监控平台吸烟检测算法应用场景

智能边缘分析一体机吸烟检测算法是一种集成了先进图像处理、模式识别和深度学习技术的算法,专门用于实时监测和识别公共场所中的吸烟行为。以下是关于该算法的详细介绍: 工作原理 1、视频采集: 通过安装在公共场所的摄像头,实时…

电巢科技CIOE中国光博会:激光雷达技术应用研讨会圆满落幕!

2024年6月20日,由CIOE中国光博会与电巢科技联合主办的“激光雷达技术应用”线上研讨会成功举行。本次线上研讨会是CIOE中国光博会与电巢科技首次联合主办的论坛,旨在借助双方自身资源优势,为行业发展提供可靠的交流平台。接下来,C…

秋招突击——6/20——复习{(单调队列优化)——最大子序列和,背包问题——宠物小精灵收服问题}——新作{两两交换链表中的节点}

文章目录 引言复习单调队列优化——最大子序列和思路分析实现代码参考实现 背包问题——宠物小精灵的收服问题个人实现参考实现 新作两两交换链表中的节点个人实现参考实现 删除有序数组中的重复项个人实现知识补全迭代器的访问和控制vector删除特定的元素erasevector底层删除元…

canvas入门详细教程(W3C)

文章目录 一、线形1、画线形之前,最基本的方法需要知道:2、线形的样式设置:3、不同的线形路径给不同的样式设置-需要知道俩个方法:4、画线形三角5、画贝塞尔曲线6、画虚线 二、画矩形1、绘制空心矩形有三种方法2、绘制填充矩形有俩…

【sklearn基础入门教程】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

c++ 设计模式 的课本范例

( 0 ) 这里补充面向对象设计的几个原则: 开闭原则OCP : 面向增补开放,面向代码修改关闭。其实反映到代码设计上就是类的继承,通过继承与多态,可以不修改原代码,又增加新的类似的功能。 依赖倒置原则 Depend…

在Mandelbrot 集中“缩放”特定区域

1、问题背景 在创建一个快速生成 Mandelbrot 集图像的 Python 程序时,程序开发者遇到一个问题:他想要渲染该集合的一个特定区域,但他不知道如何修改代码中的数学部分来实现 “缩放”。 2、解决方案 第一种解决方案 问题根源是代码中的一行…

qt开发-14_QListwidget 仿qq好友列表制作

QListWidget 继承 QListView。QListWidget 类提供了一个基于项的列表小部件。QListWidg et 是一个便捷的类,它提供了一个类似于 QListView(下一小节将讲到)提供的列表视图,但 是提供了一个用于添加和删除项目的基于项目的经典接口…

智慧互联:Vatee万腾平台展现科技魅力

随着科技的迅猛发展,我们的生活正逐渐变得智能化、互联化。在这个信息爆炸的时代,一个名为Vatee万腾的平台正以其独特的魅力,引领我们走向一个更加智能的未来。 Vatee万腾,这个名字本身就充满了对科技未来的憧憬与期待。作为一家专…

Jacob------VBA的局限性(复杂批注的获取方式)

问题再现: 同一个字段被多个批注 使用VBA代码是获取不到他们的关系的 ,原因如下: 同一个字段被多个批注,并且每个批注都有回复是无法通过VBA语言获取的 ,解释如下: ① 微软Microsoft 官方文档 提供的API …

微信营销自动化(朋友圈自动点赞工具):UIAutomation的解决方案

文章不用看, 是AI生成的, 请直接查看下载地址 http://www.aisisoft.top . 微信朋友圈自动点赞工具, 自动群发工具 在当今的数字化营销领域,自动化工具成为了提升工作效率、增强客户互动的关键。本文将详细介绍一款基于UIAutomation框架与Python语言构建的微信营销自…

【MySQL】如果表被锁可以尝试看一下事务

今天在MySQL中删除表的时候,发现无法删除,一执行drop,navicat就卡死。 通过 SHOW PROCESSLIST显示被锁了 kill掉被锁的进程后依旧被锁 最后发现是由于存在为执行完的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; kill掉这些事务以…

Excel 查找后隐去右边列

Excel 有几列数字 ABC11002042002202100102326027010841199100512100100 当给定参数时,请从每行找到该参数,隐去右边的列。如果某行不含该参数,则隐去整行。当参数是 100 时,结果如下: ABC710082021009119910010121…

挑战极限外,交易无疆界

交易,并非是仅限于金融行业的专属舞台!在Eagle Trader,我们深信,无论您来自何方,都怀揣着独特的视角和优势,能在交易场上展现出别具一格的策略。 我们热烈欢迎来自各行各业的交易者,因为正是你…

随心笔记,第七更之Java 加密Jar包

目录 一、Linux搭建golang环境 二、Jar包加密 (一)、环境配置 (1)Linux (1)下载Go语言二进制包 (2)解压缩到/usr/local目录 (3)设置环境变量 &#x…

vue3,pinia状态管理,手写插件实现持久化

状态管理和持久化 先简单概述一下状态管理和持久化 状态管理:使任意两个组件共享数据持久化:将共享的数据保存在本地,不随页面销毁而消失 要实现状态的持久化,可以直接采用插件的形式实现,插件其实就是一个函数&#…