c++入门 (c++教程 c++入门 c++编程)

c++入门 (c++教程 c++入门 c++编程)

ID:18138889

大小:71.00 KB

页数:32页

时间:2018-09-14

上传者:U-3770
c++入门 (c++教程 c++入门 c++编程)_第1页
c++入门 (c++教程 c++入门 c++编程)_第2页
c++入门 (c++教程 c++入门 c++编程)_第3页
c++入门 (c++教程 c++入门 c++编程)_第4页
c++入门 (c++教程 c++入门 c++编程)_第5页
资源描述:

《c++入门 (c++教程 c++入门 c++编程)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

C++入门(C++教程C++入门C++编程)C++入门主题:初学者,你应当如何学习C++以及编程作者:未知文章来源:天极Yesky软件频道Javascript是世界上最受误解的语言,其实C++何尝不是。坊间流传的错误的C++学习方法一抓就是一大把。我自己在学习C++的过程中也走了许多弯路,浪费了不少时间。  为什么会存在这么多错误认识?原因主要有三个,一是C++语言的细节太多。二是一些著名的C++书籍总在(不管有意还是无意)暗示语言细节的重要性和有趣。三是现代C++库的开发哲学必须用到一些犄角旮旯的语言细节(但注意,是库设计,不是日常编程)。这些共同塑造了C++社群的整体心态和哲学。  单是第一条还未必能够成气候,其它语言的细节也不少(尽管比起C++起来还是小巫见大巫),就拿Javascript来说,作用域规则,名字查找,closure,for/in,这些都是细节,而且其中还有违反直觉的。但许多动态语言的程序员的理念我猜大约是学到哪用到哪罢。但C++就不一样了,学C++之人有一种类似于被暗示的潜在心态,就是一定要先把语言核心基本上吃透了才能下手写出漂亮的程序。这首先就错了。这个意识形成的原因在第二点,C++书籍。市面上的C++书籍不计其数,但有一个共同的缺点,就是讲语言细节的书太多——《C++gotchas》,《EffectiveC++》,《MoreEffectiveC++》,但无可厚非的是,C++是这样一门语言:要拿它满足现代编程理念的需求,尤其是C++库开发的需求,还必须得关注语言细节,乃至于在C++中利用语言细节已经成了一门学问。比如C++模板在设计之初根本没有想到模板元编程这回事,更没想到C++模板系统是图灵完备的,这也就导致了《ModernC++Design》和《C++TemplateMetaprogramming》的惊世骇俗。   这些技术的出现为什么惊世骇俗,打个比方,就好比是一块大家都认为已经熟悉无比,再无秘密可言的土地上,突然某天有人挖到原来地下还蕴藏着最丰富的石油。在这之前的C++虽然也有一些细节,但也还算容易掌握,那可是C++程序员们的happyoldtimes,因为C++的一切都一览无余,everythingisfiguredout。然而《ModernC++Design》的出世告诉人们,“瞧,还有多少细节你们没有掌握啊。”于是C++程序员们久违的激情被重燃起来,奋不顾身的踏入细节的沼泽中。尤其是,模板编程将C++的细节进一步挖掘到了极致——我们干嘛关心涉及类对象的隐式转换的优先级高低?看看boost::is_base_of就可以知道有多诡异了。  但最大的问题还在于,对于这些细节的关注还真有它合适的理由:我们要开发现代模板库,要开发activelibrary,就必须动用模板编程技术,要动用模板编程技术,就必须利用语言的犄角旮旯,enable_if,type_traits,甚至连早就古井无波的C宏也在乱世中重生,看看boost::preprocessor有多诡异就知道了,连C宏的图灵完备性(预编译期的)都被挖掘出来了。为什么要做这些?好玩?标榜?都不是,开发库的实际需求。但这也正是最大的悲哀了。在boost里面因实际需求而动用语言细节最终居然能神奇的完成任务的最好教材就是boost::foreach,这个小设施对语言细节的发掘达到了惊天地泣鬼神的地步,不信你先试着自己去看看它的源代码,再看看作者介绍它的文章吧。而boost::typeof也不甘其后——C++语言里面有太多被“发现”而不是被“发明”的技术。难道最初无意设置这些语言规则的家伙们都是Oracles?  因为没有variadictemplates,人们用宏加上缺省模板参数来实现类似效果。因为没有concepts,人们用模板加上析构函数的细节来完成类似工作。因为没有typeof,人们用模板元编程和宏加上无尽的细节来实现目标…C++开发者们的DIY精神不可谓不强。   然而,如果仅仅是因为要开发优秀的库,那么涉及这些细节都还是情有可原的,至少在C++09出现并且编译器厂商跟上之前,这些都还能说是不得已而为之。但我们广大的C++程序员呢?大众是容易被误导的,我也曾经是。以为掌握了更多的语言细节就更牛,但实际却是那些语言细节十有八九是平时编程用都用不到的。C++中众多的细节虽然在库设计者手里面有其用武之地,但普通程序员则根本无需过多关注,尤其是没有实际动机的关注。一般性的编码实践准则,以及基本的编程能力和基本功,乃至基本的程序设计理论以及算法设计。才是真正需要花时间掌握的东西。  学习最佳编码实践比学习C++更重要。看优秀的代码也比埋头用差劲的编码方式写垃圾代码要有效。直接、清晰、明了、KISS地表达意图比玩编码花招要重要…  避免去过问任何语言细节,除非必要。这个必要是指在实际编程当中遇到问题,这样就算需要过问细节,也是最省事的,懒惰者原则嘛。一个掌握了基本的编程理念并有较强学习能力的程序员在用一门陌生的语言编程时就算拿着那本语言的圣经从索引翻起也可以编出合格的程序来。十年学会编程不是指对每门语言都得十年,那一辈子才能学几门语言哪,如果按字母顺序学的话一辈子都别指望学到Ruby了;十年学习编程更不是指先把语言特性从粗到细全都吃透才敢下手编程,在实践中提高才是最重要的。  至于这种抠语言细节的哲学为何能在社群里面呈野火燎原之势,就是一个心理学的问题了。想像人们在论坛上讨论问题时,一个对语言把握很细致的人肯定能够得到更多的佩服,而由于论坛上的问题大多是小问题,所以解决实际问题的真正能力并不能得到显现,也就是说,知识型的人能够得到更多佩服,后者便成为动力和仿效的砝码。然而真正的编程能力是与语言细节没关系的,熟练运用一门语言能够帮你最佳表达你的意图,但熟练运用一门语言绝不意味着要把它的边边角角全都记住。懂得一些常识,有了编程的基本直觉,遇到一些细节错误的时候再去查书,是最节省时间的办法。   C++的书,Bjarne的圣经《TheC++ProgrammingLanguage》是高屋建瓴的。《大规模C++程序设计》是挺务实的。《AcceleratedC++》是最佳入门的。《C++Templates》是仅作参考的。《C++TemplateMetaprogramming》是精力过剩者可以玩一玩的,普通程序员碰都别碰的。《ISO.IECC++Standard14882》不是拿来读的。Bjarne最近在做C++的教育,新书是绝对可以期待的。  P.S.关于如何学习编程,g9的blog上有许多精彩的文章:这里,这里,这里,这里…实际上,我建议你去把g9老大的blog翻个底朝天:P  再P.S.书单?我是遑于给出一个类似《C++初学者必读》这种书单的。C++的书不计其数,被公认的好书也不胜枚举。只不过有些书容易给初学者造成一种错觉,就是“学习C++就应该是这个样子的”。比如有朋友提到的《高质量C/C++编程》,这本书有价值,但不适合初学者,初学者读这样的书容易一叶障目不见泰山。实际上,正确的态度是,细节是必要的。但细节是次要的。其实学习编程我觉得应该最先学习如何用伪码表达思想呢,君不见《IntroductiontoAlgorithm》里面的代码?《TAOCP》中的代码?哦,对了它们是自己建立的语言,但这种仅教学目的的语言的目的就是为了避免让写程序的人一开始就忘了写程序是为了完成功能,以为写程序就是和语言细节作斗争了。Bjarne说程序的正确性最重要,boost的编码标准里面也将正确性列在性能前面。  此外,一旦建立了正确的学习编程的理念,其实什么书(只要不是太垃圾的)都有些用处。都当成参考书,用的时候从目录或索引翻,基本就对了。  再再P.S.myan老大和g9老大都给出了许多精彩的见解。我不得不再加上一个P.S。具体我就不摘录了,如果你读到这里,请务必往下看他们的评论。转载者别忘了转载他们的评论:-)   许多朋友都问我同一个问题,到底要不要学习C++。其实这个问题问得很没有意义。“学C++”和“不学C++”这个二分法是没意义的,为什么?因为这个问题很表面,甚至很浮躁。重要的不是你掌握的语言,而是你掌握的能力,借用myan老大的话,“重要的是这个磨练过程,而不是结果,要的是你粗壮的腿,而不是你身上背的那袋盐巴。”。此外学习C++的意义其实真的是醉翁之意不在酒,像C/C++这种系统级语言,在学习的过程中必须要涉及到一些底层知识,如内存管理、编译连接系统、汇编语言、硬件体系结构等等等等知识(注意,这不包括过分犄角旮旯的语言枝节)。这些东西也就是所谓的内功了(其实最最重要的内功还是长期学习所磨练出来的自学能力)。对此大嘴Joel在《JoelOnSoftware》里面提到的漏洞抽象定律阐述得就非常漂亮。  所以,答案是,让你成为高手的并不是你掌握什么语言,精通C++未必就能让你成为高手,不精通C++也未必就能让你成为低手。我想大家都不会怀疑g9老大如果要抄起C++做一个项目的话会比大多数自认熟练C++的人要做得漂亮。所以关键的不是语言这个表层的东西,而是底下的本质矛盾。当然,不是说那就什么语言都不要学了,按照一种曹操的逻辑,“天下语言,唯imperative与declarative耳”。C++是前者里面最复杂的一种,支持最广泛的编程范式。借用当初数学系入学大会上一个老师的话,“你数学都学了,还有什么不能学的呢?”。学语言是一个途径,如果你把它用来磨练自己,可以。如果你把它用来作为学习系统底层知识的钥匙,可以。如果你把它用来作为学习如何编写优秀的代码,如何组织大型的程序,如何进行抽象设计,可以。如果掉书袋,光啃细节,我认为不可以(除非你必须要用到细节,像boost库的coder们)。然后再借用一下g9老大的《银弹和我们的职业》中的话:   银弹和我们的职业发展有什么相干?很简单:我们得把时间用于学习解决本质困难。新技术给高手带来方便。菜鸟们却不用指望被新技术拯救。沿用以前的比喻,一流的摄影师不会因为相机的更新换代而丢掉饭碗,反而可能借助先进技术留下传世佳作。因为摄影的本质困难,还是摄影师的艺术感觉。热门技术也就等于相机。不停追新,学习这个框架,那个软件,好比成天钻研不同相机的说明书。而热门技术后的来龙去脉,才好比摄影技术。为什么推出这个框架?它解决了什么其它框架不能解决的问题?它在哪里适用?它在哪里不适用?它用了什么新的设计?它改进了哪些旧的设计?Whyisforever.和朋友聊天时提到SteveMcConnell的《ProfessionalSoftwareDevelopment》里面引了一个调查,说软件开发技术的半衰期20年。也就是说20年后我们现在知识里一半的东西过时。相当不坏。朋友打趣道:“应该说20年后IT界一半的技术过时,我们学的过时技术远远超过这个比例。具体到某人,很可能5年他就废了”。话虽悲观,但可见选择学习内容的重要性。学习本质技艺(技术迟早过时,技艺却常用长新)还有一好处,就是不用看着自己心爱的技术受到挑战的时候干嚎。C/C++过时就过时了呗,只要有其它的系统编程语言。Java倒了就倒了呗,未必我不能用.NET?Ruby昙花一现又如何。如果用得不爽,换到其它动态语言就是了。J2EE被废了又怎样?未必我们就做不出分布系统了?这里还举了更多的例子。  一句话,只有人是真正的银弹。职业发展的目标,就是把自己变成银弹。那时候,你就不再是人,而是人弹。  最后就以我在Bjarne的众多访谈当中摘录的一些关于如何学习C++(以及编程)的看法结束吧(没空逐段翻译了,只将其中我觉得最重要的几段译了一下,当然,其它也很重要,这些段落是在Bjarne的所有采访稿中摘抄出来的,所以强烈建议都过目一下):  Isuspectthatpeoplethinktoolittleaboutwhattheywanttobuild,toolittleaboutwhatwouldmakeitcorrect,andtoomuchaboutefficiencyandfollowingfashionsofprogramming style.Thekeyquestionsarealways:whatdoIwanttodo?andhowdoIknowthatIhavedoneif?.StrategiesfortestingentersintomyconcernsfromwellbeforeIwritethefiratlineofcode,andthatdespitemyviewthatyouhavetowritecodeveryearly-ratherthanwaituntiladesigniscomplete.  译:我感觉人们过多关注了所谓“效率”以及跟随编程风格的潮流,却严重忽视了本不该被忽视的问题,如“我究竟想要构建什么样的系统”、“怎样才能使它正确”。最关键的问题永远是:“我究竟想要做什么?”和“如何才能知道我的系统是否已经完成了呢?”就拿我来说吧,我会在编写第一行代码之前就考虑测试方案,而且这还是在我关于应当早于设计完成之前就进行编码的观点的前提之下。  Obviously,C++isverycomplex.Obviously,peoplegetlost.However,mostpeplegetlostwhentheygetdivertedintobecominglanguagelawyersratherthangettinglostwhentheyhaveaclearideaofwhattheywanttoexpressandsimplylookatC++languagefeaturestoseehowtoexpressit.Onceyouknowdataabsreaction,classhierarchies(object-orientedprogramming),andparameterizationwithtypes(genericprogramming)inafairlygeneralway,theC++languagefeaturesfallinplace.  译:诚然,C++非常复杂。诚然,人们迷失其中了。然而问题是,大多数人不是因为首先对自己想要表达什么有了清晰的认识只不过在去C++语言中搜寻合适的语言特性时迷失的,相反,大多数人是在不觉成为语言律师的路上迷失在细节的丛林中的。事实是,只需对数据抽象、类体系结构(OOP)以及参数化类型(GP)有一个相当一般层面的了解,C++纷繁的语言特性也就清晰起来了。  Well,Idon'tthinkImadesuchatrade-off.Iwantelegant andefficientcode.SometimesIgetit.Thesedichotomies(betweenefficiencyversuscorrectness,efficiencyversusprogrammertime,efficiencyversushigh-level,etcetera.)arebogus.  Ithinktherealproblemisthatwe(thatis,wesoftwaredevelopers)areinapermanentstateofemergency,graspingatstrawstogetourworkdone.Weperformmanyminormiraclesthroughtrialanderror,excessiveuseofbruteforce,andlotsandlotsoftesting,but--sooften--it'snotenough.  Softwaredevelopershavebecomeadeptatthedifficultartofbuildingreasonablyreliablesystemsoutofunreliableparts.Thesnagisthatoftenwedonotknowexactlyhowwedidit:asystemjustsortofevolvedintosomethingminimallyacceptable.Personally,Iprefertoknowwhenasystemwillwork,andwhyitwill.  Therearemoreusefulsystemsdevelopedinlanguagesdeemedawfulthaninlanguagespraisedforbeingbeautiful--manymore.Thepurposeofaprogramminglanguageistohelpbuildgoodsystems,wheregoodcanbedefinedinmanyways.Mybriefdefinitionis,correct,maintainable,andadequatelyfast.Aestheticsmatter,butfirstandforemostalanguagemustbeuseful;itmustallowreal-worldprogrammerstoexpressreal-worldideassuccinctlyandaffordably.  I'msurethatforeveryprogrammerthatdislikesC++,thereisonewholikesit.However,afriendofminewenttoaconferencewherethekeynotespeakeraskedtheaudiencetoindicatebyshowofhands,one,howmanypeopledislikedC++, andtwo,howmanypeoplehadwrittenaC++program.Thereweretwiceasmanypeopleinthefirstgroupthanthesecond.Expressingdislikeofsomethingyoudon'tknowisusuallyknownasprejudice.Also,complainersarealwayslouderandmorecertainthanproponents--reasonablepeopleacknowledgeflaws.IthinkIknowmoreabouttheproblemswithC++thanjustaboutanyone,butIalsoknowhowtoavoidthemandhowtouseC++'sstrengths.  Inanycase,Idon'tthinkitistruethattheprogramminglanguagesaresodifficulttolearn.Forexample,everyfirst-yearuniversitybiologytextbookcontainsmoredetailsanddeepertheorythanevenanexpert-levelprogramming-languagebook.Mostapplicationsinvolvestandards,operatingsystems,libraries,andtoolsthatfarexceedmodernprogramminglanguagesincomplexity.Whatisdifficultistheappreciationoftheunderlyingtechniquesandtheirapplicationtoreal-worldproblems.Obviously,mostcurrentlanguageshavemanypartsthatareunnecessarilycomplex,butthedegreeofthosecomplexitiescomparedtosomeidealminimumisoftenexaggerated.  Weneedrelativelycomplexlanguagetodealwithabsolutelycomplexproblems.InotethatEnglishisarguablythelargestandmostcomplexlanguageintheworld(measuredinnumberofwordsandidioms),butalsooneofthemostsuccessful.  C++providesanice,extendedcasestudyintheevolutionaryapproach.CcompatibilityhasbeenfarhardertomaintainthanIoranyoneelseexpected.PartofthereasonisthatChaskeptevolving,partiallyguidedbypeoplewhoinsist thatC++compatibilityisneithernecessarynorgoodforC.Anotherreason--probablyevenmoreimportant--isthatorganizationspreferinterfacesthatareintheC/C++subsetsothattheycansupportbothlanguageswithasingleeffort.ThisleadstoaconstantpressureonusersnottousethemostpowerfulC++featuresandtomythsaboutwhytheyshouldbeusedcarefully,infrequently,orbyexpertsonly.That,combinedwithbackwards-lookingteachingofC++,hasledtomanyfailurestoreapthepotentialbenefitsofC++asahigh-levellanguagewithpowerfulabstractionmechanisms.  Thequestionishowdeeplyintegratedintotheapplicationthosesystemdependenciesare.Iprefertheapplicationtobedesignedconceptuallyinisolationfromtheunderlyingsystem,withanexplicitlydefinedinterfacetotheouterworld,andthenintegratedthroughathinlayerofinterfacecode.  HadIhadachancetonamethestyleofprogrammingIlikebest,itwouldhavebeenclass-orientedprogramming,butthenI'mnotparticularlygoodatfindingsnappynames.TheschoolofthoughtthatIbelongto-rootedinSimulaandrelateddesignphilosophies-emphasizestheroleofcompile-timecheckingandflexible(static)typesystems.Reasoningaboutthebehaviorofaprogramhastoberootedinthe(static)structureofthesourcecode.Thefocusshouldbeonguarantees,invariant,etc.whicharecloselytiedtothatstaticstructure.ThisistheonlywayIknowtoeffectivelydealwithcorrectness.Testingisessentialbutcannotbesystematicandcompletewithoutagoodinternalprogramstructure-simple-mindedblackboxtestingofanysignificantsystemisinfeasiblebecauseoftheexponentialexplosionofstates.   So,Irecommendpeopletothinkintermsofclassinvariants,exceptionhandlingguarantees,highlystructuredresourcemanagement,etc.IshouldaddthatIintenselydislikedebugging(asahhocandunsystematic)andstronglypreferreasoningaboutsourcecodeandsystematictesting.  Pros:flexibility,generality,performance,portability,goodtoolsupport,availableonmoreplatformsthananycompetitorexceptC,ACCESStohardwareandsystemresources,goodavailabilityofprogrammersanddesigners.Cons:complexity,sub-optimalusecausedbypoorteachingandmyths.主题:(一)C++与C语言的区别注明:以下及其后续内容部分摘自《StandardC++Bible》,所有程序代码都在VisualStdio6.0中编译运行,操作系统为WinXP。本文不涉及VC6.0开发工具的使用,只讲解C++语法知识。C++和C的共同部分就不讲解了(如常量和变量,循环语句和循环控制,数组和指针等,这里面的一些区别会在本节和下节介绍一下),具体可看精华区->新手上路->C语言入门,本文着重介绍C++的特点,如类、继承和多重继承、运算符重载、类模板、C++标准库、模板库、等等。一、C++概述(一)发展历史1980年,BjarneStroustrup博士开始着手创建一种模拟语言,能够具有面向对象的程序设计特色。在当时,面向对象编程还是一个比较新的理念,Stroustrup博士并不是从头开始设计新语言,而是在C语言的基础上进行创建。这就是C++语言。 1985年,C++开始在外面慢慢流行。经过多年的发展,C++已经有了多个版本。为次,ANSI和ISO的联合委员会于1989年着手为C++制定标准。1994年2月,该委员会出版了第一份非正式草案,1998年正式推出了C++的国际标准。(二)C和C++C++是C的超集,也可以说C是C++的子集,因为C先出现。按常理说,C++编译器能够编译任何C程序,但是C和C++还是有一些小差别。例如C++增加了C不具有的关键字。这些关键字能作为函数和变量的标识符在C程序中使用,尽管C++包含了所有的C,但显然没有任何C++编译器能编译这样的C程序。C程序员可以省略函数原型,而C++不可以,一个不带参数的C函数原型必须把void写出来。而C++可以使用空参数列表。C++中new和delete是对内存分配的运算符,取代了C中的malloc和free。标准C++中的字符串类取代了C标准C函数库头文件中的字符数组处理函数。C++中用来做控制态输入输出的iostream类库替代了标准C中的stdio函数库。C++中的try/catch/throw异常处理机制取代了标准C中的setjmp()和longjmp()函数。二、关键字和变量C++相对与C增加了一些关键字,如下:typenamebooldynamic_castmutablenamespacestatic_castusingcatchexplicitnewvirtualoperatorfalseprivatetemplatevolatileconstprotectedthiswchar_tconst_castpublicthrowfriendtruereinterpret_casttrybitorxor_eand_eqcomplor_eqnot_eqbitand 在C++中还增加了bool型变量和wchar_t型变量:布尔型变量是有两种逻辑状态的变量,它包含两个值:真和假。如果在表达式中使用了布尔型变量,那么将根据变量值的真假而赋予整型值1或0。要把一个整型变量转换成布尔型变量,如果整型值为0,则其布尔型值为假;反之如果整型值为非0,则其布尔型值为真。布儿型变量在运行时通常用做标志,比如进行逻辑测试以改变程序流程。#includeiostream.hintmain(){boolflag;flag=true;if(flag)cout>a;/*输入一个数值*/cout>a;六、函数重载在C++中,允许有相同的函数名,不过它们的参数类型不能完全相同,这样这些函数就可以相互区别开来。而这在C语言中是不允许的。1.参数个数不同#includeiostream.hvoida(int,int);voida(int);intmain(){a(5);a(6,7);return0;}voida(inti){cout<}voida(inti,intj){cout<}2.参数格式不同#includeiostream.h voida(int,int);voida(int,float);intmain(){a(5,6);a(6,7.0);return0;}voida(inti,intj){cout<}voida(inti,floatj){cout<}七、变量作用域C++语言中,允许变量定义语句在程序中的任何地方,只要在是使用它之前就可以;而C语言中,必须要在函数开头部分。而且C++允许重复定义变量,C语言也是做不到这一点的。看下面的程序:#includeiostream.hinta;intmain(){cin>>a;for(inti=1;i<=10;i++)//C语言中,不允许在这里定义变量 {staticinta=0;//C语言中,同一函数块,不允许有同名变量a+=i;cout<<::a<<<}return0;}八、new和delete运算符在C++语言中,仍然支持malloc()和free()来分配和释放内存,同时增加了new和delete来管理内存。1.为固定大小的数组分配内存#includeiostream.hintmain(){int*birthday=newint[3];birthday[0]=6;birthday[1]=24;birthday[2]=1940;cout<>size;int*array=newint[size];for(inti=0;iarray[i]=rand();for(i=0;icout<<' '等运算符#includeiostream.hvoidfunc1(sp);voidfunc2(s&p);structs{intn;chartext[10];};intmain(){staticsstr={123,China}; func1(str);func2(str);return0;}voidfunc1(sp){cout>dt;if(dt>0&&dt<4){constDate&bd=getdate(dt);cout<}}return0;}程序都很简单,就不讲解了。主题:(二)类的设计,构造函数和析构函数 类是编程人员表达自定义数据类型的C++机制。它和C语言中的结构类似,C++类支持数据抽象和面向对象的程序设计,从某种意义上说,也就是数据类型的设计和实现。一、类的设计1.类的声明class类名{private://私有...public://公有...};2.类的成员一般在C++类中,所有定义的变量和函数都是类的成员。如果是变量,我们就叫它数据成员如果是函数,我们就叫它成员函数。3.类成员的可见性private和public访问控制符决定了成员的可见性。由一个访问控制符设定的可访问状态将一直持续到下一个访问控制符出现,或者类声明的结束。私有成员仅能被同一个类中的成员函数访问,公有成员既可以被同一类中的成员函数访问,也可以被其他已经实例化的类中函数访问。当然,这也有例外的情况,这是以后要讨论的友元函数。类中默认的数据类型是private,结构中的默认类型是public。一般情况下,变量都作为私有成员出现,函数都作为公有成员出现。类中还有一种访问控制符protected,叫保护成员,以后再说明。4.初始化在声明一个类的对象时,可以用圆括号()包含一个初始化表。看下面一个例子: #includeiostream.hclassBox{private:intheight,width,depth;//3个私有数据成员public:Box(int,int,int);~Box();intvolume();//成员函数};Box::Box(intht,intwd,intdp){height=ht;width=wd;depth=dp;}Box::~Box(){//nothing}intBox::volume(){returnheight*width*depth;}intmain() {Boxthisbox(3,4,5);//声明一个类对象并初始化cout

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭