当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

一个C++日期类(第一部份)[VC/C++编程]

赞助商链接



  本文“一个C++日期类(第一部份)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

本文合适初级读者

Chuck Allison 是盐湖城圣 Latter Day 教堂总部下耶稣教堂家族历史研究处的软件体系计划师.他拥有数学学士和数学硕士学位.他从1975年起开始编程,从1984年起他开始从事c语言的讲授和开辟.他目前的爱好是面向对象的技术及其教诲.他是X3J16,ANSI C ++尺度化委员会的一员.发送e-mail 到 allison@decus.org,大概拨打电话到 (801)240-4510 都可以与他获得接洽.

上个月的专栏里介绍了一个日期隔断函数,它可以算出肆意两个日期之间的年,月和日.这个月的专栏则提出了一个用C++办理该问题的办法.这种办法的本质是成立一种新的数据范例,这种数据范例的行为就像内建的数据范例一样.换句话说,你要从基于函数的办法 (“我想要怎么样干事”)转换到基于对象的办法(“我的问题的原理和对象是什么”).利用C++非常需求别的一种考虑问题的办法.为了实现这个转换,首先要先知道为什么会有C++存在.

关于两种语言的故事

C++源自80年代早期 AT&T 的 Bjarne Stroustrup 提出的“带类的 C”.他当时正在追求在 Simula-67 中更快的举行仿真的办法."class"是 Simula 顶用来指用户自己定义的范例的术语,可以定义出非常接近实际的对象,这是举行杰出的仿真的关键.有没有一种更好的办法,可以比在c语言--最快的历程化语言中加入"class"的概念更快的举行仿真呢?

挑选C为类供应了一个不但有效并且机动的工具.固然一些其他的语言在C++之前好久就支持通过类来对数据举行抽象,但是C++用的最遍及.几近每一种主要的具有C语言编译器的平台一样可以支持C++.最后我还据说,C++的用户群每七个月就会翻一番.

对C++的最初理解是令人吃惊的.假如你是从C语言转过来的话,你需求把下面这些词语加进你的词汇表:抽象类,存取掌握,基类,catch子句,类,类的作用域,构造函数,拷贝构造函数,缺省参数,缺省构造函数,delete运算符,派生类,析构函数,非常,非常处理,友元,担当,内联函数,操作符,成员函数,多重担当,嵌套类,new处理函数,new操作符,重载,成员指针,多态,私有,保护,公有,纯虚函数,引用,静态成员,流,模板,this指针,try块,范例安全衔接,虚基类,虚函数.

一个好消息说C++是一种强盛的、有效的、面向对象的、可以处理各种复杂利用的语言.坏消息则是这种语言本身就对比复杂,比C语言难掌握.C语言是造成这一问题的一部份.C++是一个混血儿,既有面向对象的特点,又有通用系统编程语言的特点.我们不大概纯粹介绍C++这一系列丰富的新特点而不一点也不考虑C语言本身.对C的兼容性是C++计划时的一个主要目标.正如Bjarne在ANSI C++委员会上所报告的那样,C++是一种"工程上的折衷",它"要和C语言尽大概的接近,但又不能太接近".到底要多接近目前还在研究中.

一个渐进的历程

你可以很有效的利用C++而不需求掌握它的全部.事实上,面向对象的技术答应说只要开辟商做好他们的事情(供应计划杰出的、可重用并且可扩大的类库),那么你便可以很简单的开辟你的利用程序.目前的产品,比方Borland公司的利用编程接口,在很多方面都证明了这一点.

假如你认为你必须掌握这门语言,你可以循序渐进并且在这个历程中持续开辟你的利用程序.这里有三个必须掌握的地方:

一个更好的C语言

数据抽象

面向对象的编程

你可以把C++当作一门更好的C语言来利用,因为它更安全更富于表现力.与这一点相关的特点有:范例安全衔接,强迫函数原型,内联函数,const限定词(是的,ANSI C从C++中鉴戒的这个词),函数重载,缺省参数,引用和语言供应的对动态内存管理的支持.你一样需求当心这两种语言不兼容的地方.C语言中有一个强盛的子集,Plum 和 Saks 称其做"范例安全的 C"(拜见 C++ Programming Guidelines, Plum and Saks, Plum-Hall, 1992).

正如我在这篇文章和下一篇文章中所报告的一样,C++支持数据抽象--用户可以自己定义行为与内建范例相像的数据范例,这种数据抽象机制包含:类,存取限制,构造和析构函数,运算符重载,模板和非常处理.

面向对象的程序计划通过根究类与类之间的关系在数据抽象上更进一步.此中两个关键的概念是担当(通过声明一个新类与另一个类的类似与辨别定义它,此中的类似被重用)和多态(为一族相关的操作供应同一个接口,运行时辨认).C++辨别通过类的派生和虚汗数来支持担当和多态.

一个类就是一个扩大的struct.除了定义数据成员,你还可认为其增添成员函数.日期类的定义在文件data.h中的 Listing 1.它与上个月的C版本差别,因为在这里interval函数是一个成员函数而不是全局函数.Date::interval()的实目前 Listing 2 中."::"叫造作用域运算符.它奉告编译器interval函数是Date类的成员函数.interval函数原型中的"&"阐明这个函数的参数由利用传送(拜见关于引用的选项).Listing 3 中的程序展示了若何利用这个日期类.你必须利用结构成员的语法来调用 Date:: interval():

result = d1.interval (d2);

Date作为范例标识符,就像系统内建范例一样的施展作用(比方,你可以定义Date的对象而不利用struct关键字).永久也没必要做以下的定义:

typedef struct Date Date;

事实上,类的概念是如此的基本,以至于C++已经将构造标签和普通的标识符结合成一个独立的名字空间.

注意我已经将isleap定义成了一个内联函数(在C版本中它是一个宏).内联函数像宏一样将代码展开,但它也像普通函数一样举行作用阈和范例的查抄.除非你要利用the stringizing or token-pasting operations of the preprocessor,,不然在C++中不需求利用 function-like 的宏.目前考虑 Listing 2 中的这个声明:

years = d2.year - year;

year指的是什么对象?在C版本中,这个声明以下:

years = d2.year - d1.year;

既然成员函数的调用老是与对象相关联(比方,d1. interval (d2)),因此当作员函数没有前缀修饰的时刻,普通是相关联对象的成员(在这里,year 指的是d1.year).this关键字代表一个指向潜在对象的指针,因此我可以做一个越发明确的声明:

years = d2.year - this->year;但是这种用法很少. 在 Listing 4 中,我在类的定义中增添了以下的声明:Date();
Date(int,int,int);

这是一种特别的成员函数叫做构造函数.构造函数答应你在一个对象被成立的时刻指定怎么样初始化这个对象.当你定义一个没有初始值的日期对象时,首先调用缺省构造函数(因为它没有任何参数):

Date d;下面的声明调用第二个构造函数:

Date d(10,1,51);


  以上是“一个C++日期类(第一部份)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 一个C++编译器的不完好列表(翻译版)
  • 一个C++日期类(第一部份)
  • 一个C++日期类(第二部份)
  • <b>Blocks下的第一个C++程序</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .