C程序员面试必答_第1页
C程序员面试必答_第2页
C程序员面试必答_第3页
C程序员面试必答_第4页
C程序员面试必答_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C# 程程序员面面试必答答1.静态态变量和和非静态态变量的的区别? 答: 静态态变量: 静态态变量使使用 sstattic 修饰符符进行声声明 在在所属类类被装载载时创建建 通过过类进行行访问 所属类类的所有有实例的的同一静静态变量量都是同同一个值值 非静静态变量量: 不不带有 staaticc 修饰饰符声明明的变量量称做非非静态变变量 在在类被实实例化时时创建 通过对对象进行行访问 同一个个类的不不同实例例的同一一非静态态变量可可以是不不同的值值 示例例:usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSyst

2、tem.Texxt;nameespaace Exaamplle011 claass Proograam cllasss Cllasss1 ppubllic staaticc Sttrinng sstatticSStr = &p;quuot;Claass&p;quuot; ppubllic Strringg nootsttatiicSttr = &aamp;quoot;OObj&p;quuot; sttatiic vvoidd Maain(strringg arggs) /静态态变量通通过类进进行访问问,该类类所有实实例的同同一静态态变量都都是同一一个值 CConssolee.

3、WrriteeLinne(&p;quuot;Claass11s staaticcStrr: 0&p;quuot;, CClasss1.staaticcStrr); CClasss1 tmppObjj1 = neew CClasss1(); ttmpOObj11.nootsttatiicSttr = &aamp;quoot;ttmpOObj11&ammp;qquott; CClasss1 tmppObjj2 = neew CClasss1(); ttmpOObj22.nootsttatiicSttr = &aamp;quoot;ttmpOObj22&ammp;qquott; /非静静

4、态变量量通过对对象进行行访问,不不同对象象的同一一非静态态变量可可以有不不同的值值 CConssolee.WrriteeLinne(&p;quuot;tmppObjj1ss nootsttatiicSttr: 0&ammp;qquott;, tmppObjj1.nnotsstatticSStr); CConssolee.WrriteeLinne(&p;quuot;tmppObjj2ss nootsttatiicSttr: 0&ammp;qquott;, tmppObjj2.nnotsstatticSStr); CConssolee.ReeadLLinee(); 复制代码码结果: C

5、laass11s staaticcStrr: CClasss ttmpOObj11s nottstaaticcStrr: ttmpOObj11 tmmpObbj2s nnotsstatticSStr: tmmpObbj2 2.cconsst 和和 sttatiic rreaddonlly 区区别? 答: connst 用 cconsst 修修饰符声声明的成成员叫常常量,是是在编译译期初始始化并嵌嵌入到客客户端程程序 sstattic reaadonnly 用 sstattic reaadonnly 修饰符符声明的的成员依依然是变变量,只只不过具具有和常常量类似似的使用用方法:通过类类进行访访问

6、、初初始化后后不可以以修改。但与常常量不同同的是这这种变量量是在运运行期初初始化 示例: 测试试类:usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSysttem.Texxt;nameespaace Exaamplle022Libb pubblicc cllasss Cllasss1 puubliic cconsst SStriing strrConnst = &p;quuot;Connst&p;quuot; puubliic sstattic reaadonnly Strringg sttrStta

7、tiicReeadoonlyy = &ammp;qquott;SttatiicReeadoonlyy&ammp;qquott; /pubblicc coonstt Sttrinng sstrCConsst = &aamp;quoot;CConsst CChanngedd&ammp;qquott; /pubblicc sttatiic rreaddonlly SStriing strrStaaticcReaadonnly = &p;quuot;StaaticcReaadonnly Chaangeed&aamp;quoot; /5-11-a-s-pp-x复制代码码客户端代代码:usinng

8、SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSysttem.Texxt;usinng EExammplee02LLib;nameespaace Exaamplle022 claass Proograam sttatiic vvoidd Maain(strringg arggs) /修改改Exaamplle022中Cllasss1的sstrCConsst初始始值后,只只编译EExammplee02LLib项项目 /然后后到资源源管理器器里把新新编译的的Exaamplle022Libb.dlll拷贝贝Exaamplle022.

9、exxe所在在的目录录,执行行Exaamplle022.exxe /切不不可在IIDE里里直接调调试运行行因为这这会重新新编译整整个解决决方案! /可以以看到sstrCConsst的输输出没有有改变,而而strrStaaticcReaadonnly的的输出已已经改变变 /表明明Connst变变量是在在编译期期初始化化并嵌入入到客户户端程序序,而SStatticRReaddonlly是在在运行时时初始化化的 CConssolee.WrriteeLinne(&p;quuot;strrConnst : 0&p;quuot;, CClasss1.strrConnst); CConssole

10、e.WrriteeLinne(&p;quuot;strrStaaticcReaadonnly : 0&p;quuot;, CClasss1.strrStaaticcReaadonnly); CConssolee.ReeadLLinee(); 复制代码码结果: strrConnst : CConsst sstrSStatticRReaddonlly : SttatiicReeadoonlyy 修改改后的示示例: 测试类类:usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSysttem.Texxt;nam

11、eespaace Exaamplle022Libb pubblicc cllasss Cllasss1 /pubblicc coonstt Sttrinng sstrCConsst = &aamp;quoot;CConsst&aamp;quoot; /pubblicc sttatiic rreaddonlly SStriing strrStaaticcReaadonnly = &p;quuot;StaaticcReaadonnly&p;quuot; puubliic cconsst SStriing strrConnst = &p;quuot;Connst Chaangeed

12、&aamp;quoot; puubliic sstattic reaadonnly Strringg sttrSttatiicReeadoonlyy = &ammp;qquott;SttatiicReeadoonlyy Chhangged&p;quuot; 复制代码码结果 sstrCConsst : Coonstt sttrSttatiicReeadoonlyy : StaaticcReaadonnly Chaangeed 33.exxterrn 是是什么意意思? 答: extternn 修饰饰符用于于声明由由程序集集外部实实现的成成员函数数 经常常用于系系统APPI函数数的调用用(通过

13、过 DlllImmporrt )。注意,和和DlllImpportt一起使使用时要要加上 staaticc 修饰饰符 也也可以用用于对于于同一程程序集不不同版本本组件的的调用(用用 exxterrn 声声明别名名) 不不能与 absstraact 修饰符符同时使使用511asppx 示示例:usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSysttem.Texxt;usinng SSysttem.Runntimme.IInteeroppSerrvicces;nameespaace Exaamplle033 cla

14、ass Proograam /注意DDllIImpoort是是一个AAttrribuute Prooperrty,在在Sysstemm.Ruuntiime.IntteroopSeerviicess命名空空间中定定义 /extternn与DlllImmporrt一起起使用时时必须再再加上一一个sttatiic修饰饰符 DDllIImpoort(&ammp;qquott;Usser332.ddll&p;quuot;) puubliic sstattic extternn innt MMesssageeBoxx(innt HHanddle, sttrinng MMesssagee, sstri

15、ing Capptioon, intt Tyype); sttatiic iint Maiin() sstriing mySStriing; CConssolee.Wrritee(&aamp;quoot;EEnteer yyourr meessaage: &aamp;quoot;); mmySttrinng = Coonsoole.ReaadLiine(); rretuurn MesssaggeBoox(00, mmySttrinng, &ammp;qquott;Myy Meessaage Boxx&ammp;qquott;, 0); 复制代码码结果: 4.aabsttracct 是是什么意意

16、思? 答: absstraact 修饰符符可以用用于类、方法、属性、事件和和索引指指示器(iindeexerr),表表示其为为抽象成成员 aabsttracct 不不可以和和 sttatiic 、virrtuaal 、oveerriide 一起使使用 声声明为 absstraact 成员可可以不包包括实现现代码,但但只有类类中还有有未实现现的抽象象成员,该该类就不不可以被被实例化化,通常常用于强强制继承承类必须须实现某某一成员员 示例例:usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSysttem.Texxt;

17、nameespaace Exaamplle044 #reegioon 基基类,抽抽象类 pubblicc abbstrractt cllasss BaaseCClasss /抽象属属性,同同时具有有gett和seet访问问器表示示继承类类必须将将该属性性实现为为可读写写 puubliic aabsttracct SStriing Atttribbutee gget; sset; /抽象方方法,传传入一个个字符串串参数无无返回值值 puubliic aabsttracct vvoidd Fuuncttionn(Sttrinng vvaluue); /抽象事事件,类类型为系系统预定定义的代代理(d

18、deleegatte):EveentHHanddlerr puubliic aabsttracct eevennt EEvenntHaandller Eveent; /抽象索索引指示示器,只只具有gget访访问器表表示继承承类必须须将该索索引指示示器实现现为只读读 puubliic aabsttracct CCharr thhisintt Inndexx gget; #enndreegioon #reegioon 继继承类 pubblicc cllasss DeerivveCllasss : BasseCllasss prrivaate Strringg atttriibutte; puubl

19、iic ooverrridde SStriing Atttribbutee gget retturnn atttriibutte; sset atttriibutte = vaaluee; puubliic ooverrridde vvoidd Fuuncttionn(Sttrinng vvaluue) aattrribuute = vvaluue; iif (Eveent != nulll) Eveent(thiis, neww EvventtArggs(); puubliic ooverrridde eevennt EEvenntHaandller Eveent; puubliic oov

20、errridde CCharr thhisintt Inndexx gget retturnn atttriibutteIIndeex; #enndreegioon claass Proograam sttatiic vvoidd OnnFunnctiion(objjectt seendeer, EveentAArgss e) ffor (innt ii = 0; i (DerriveeClaass)sennderr).AAttrribuute.Lenngthh; ii+) Connsolle.WWritteLiine(DDeriiveCClasss)ssendder)i); sttatiic

21、 vvoidd Maain(strringg arggs) DDeriiveCClasss ttmpOObj = nnew DerriveeClaass(); ttmpOObj.Atttribbutee = &ammp;qquott;122345567&p;quuot; CConssolee.WrriteeLinne(ttmpOObj.Atttribbutee); /将静静态函数数OnFFuncctioon与ttmpOObj对对象的EEvennt事件件进行关关联 ttmpOObj.Eveent += neww EvventtHanndleer(OOnFuuncttionn); ttmpO

22、Obj.Funnctiion(&ammp;qquott;766543321&p;quuot;); CConssolee.ReeadLLinee(); 复制代码码结果: 123345667 77 6 5 44 3 2 11 5.intternnal 修饰符符起什么么作用? 答: innterrnall 修饰饰符可以以用于类类型或成成员,使使用该修修饰符声声明的类类型或成成员只能能在同一一程集内内访问 接口的的成员不不能使用用 innterrnall 修饰饰符 示示例 EExammplee05LLib 项目的的 Cllasss1usinng SSysttem;usinng SSysttem.

23、Colllecctioons.Genneriic;usinng SSysttem.Texxt;nameespaace Exaamplle055Libb pubblicc cllasss Cllasss1 innterrnall Sttrinng sstrIInteernaal = nuull; puubliic SStriing strrPubblicc; 复制代码码结果 EExammplee05LLib 项目的的 Cllasss2 类类可以访访问到 Claass11 的 strrIntternnal 成员 Exaamplle055 项目目的 PProggramm 类无无法访问问到 CClas

24、ss1 的 sstrIInteernaal 成成员 66.seealeed 修修饰符是是干什么么的? 答: seaaledd 修饰饰符表示示密封 用于类类时,表表示该类类不能再再被继承承,不能能和 aabsttracct 同同时使用用,因为为这两个个修饰符符在含义义上互相相排斥 用于方方法和属属性时,表表示该方方法或属属性不能能再被继继承,必必须和 oveerriide 关键字字一起使使用,因因为使用用 seealeed 修修饰符的的方法或或属性肯肯定是基基类中相相应的虚虚成员 通常用用于实现现第三方方类库时时不想被被客户端端继承,或或用于没没有必要要再继承承的类以以防止滥滥用继承承造成层层次

25、结构构体系混混乱 恰恰当的利利用 ssealled 修饰符符也可以以提高一一定的运运行效率率,因为为不用考考虑继承承类会重重写该成成员 示示例:usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSysttem.Texxt;nameespaace Exaamplle066 claass Proograam cllasss A ppubllic virrtuaal vvoidd F() Connsolle.WWritteLiine(&ammp;qquott;A.F&aamp;quoot;); ppubllic virr

26、tuaal vvoidd G() Connsolle.WWritteLiine(&ammp;qquott;A.G&aamp;quoot;); cllasss B : AA ppubllic seaaledd ovverrridee vooid F() Connsolle.WWritteLiine(&ammp;qquott;B.F&aamp;quoot;); ppubllic oveerriide voiid GG() Connsolle.WWritteLiine(&ammp;qquott;B.G&aamp;quoot;); cllasss C : BB ppubllic oveerriide

27、voiid GG() Connsolle.WWritteLiine(&ammp;qquott;C.G&aamp;quoot;); sttatiic vvoidd Maain(strringg arggs) nnew A().F(); nnew A().G(); nnew B().F(); nnew B().G(); nnew C().F(); nnew C().G(); CConssolee.ReeadLLinee(); 复制代码码结果: 类 BB 在继继承类 A 时时可以重重写两个个虚函数数,如图图所示: 由于于类 BB 中对对 F 方法进进行了密密封, 类 CC 在继继承类 B 时时只能重

28、重写一个个函数,如如图所示示: 控控制台输输出结果果,类 C 的的方法 F 只只能是输输出 类类B 中中对该方方法的实实现: A.FF A.G BB.F B.GG B.F CC.G 7.ooverrridde 和和 ovverlloadd 的区区别? 答: oveerriide 表示重重写,用用于继承承类对基基类中虚虚成员的的实现 oveerlooad 表示重重载,用用于同一一个类中中同名方方法不同同参数(包包括类型型不同或或个数不不同)的的实现 示例:usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSystte

29、m.Texxt;nameespaace Exaamplle077 claass Proograam cllasss BaaseCClasss ppubllic virrtuaal vvoidd F() Connsolle.WWritteLiine(&ammp;qquott;BaaseCClasss.FF&ammp;qquott;); cllasss DeerivveCllasss : BasseCllasss ppubllic oveerriide voiid FF() basse.FF(); Connsolle.WWritteLiine(&ammp;qquott;DeerivveCllass

30、s.F&p;quuot;); ppubllic voiid AAdd(intt Leeft, innt RRighht) Connsolle.WWritteLiine(&ammp;qquott;Addd ffor Intt: 0&p;quuot;, LLeftt + Rigght); ppubllic voiid AAdd(douublee Leeft, dooublle RRighht) Connsolle.WWritteLiine(&ammp;qquott;Addd ffor intt: 0&p;quuot;, LLeftt + Rigght); sttatiic vvo

31、idd Maain(strringg arggs) DDeriiveCClasss ttmpOObj = nnew DerriveeClaass(); ttmpOObj.F(); ttmpOObj.Addd(1, 2); ttmpOObj.Addd(1.1, 2.22); CConssolee.ReeadLLinee(); 复制代码码结果: BasseCllasss.F DerriveeClaass.F AAdd forr Innt: 3 AAdd forr innt: 3.33 8.什么是是索引指指示器? 答: 实现现索引指指示器(iindeexerr)的类类可以象象数组那那样使用用其实例例

32、后的对对象,但但与数组组不同的的是索引引指示器器的参数数类型不不仅限于于intt 简单单来说,其其本质就就是一个个含参数数属性 示例:usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSysttem.Texxt;nameespaace Exaamplle088 pubblicc cllasss Poointt prrivaate douublee x, y; puubliic PPoinnt(ddoubble X, douublee Y) xx = X; yy = Y; /重写TToSttrinng方法法方便输输出

33、 puubliic ooverrridde sstriing ToSStriing() rretuurn Strringg.Foormaat(&p;quuot;X: 0 , Y: 1&ammp;qquott;, x, y); pubblicc cllasss Poointts Poointt poiintss; puubliic PPoinnts(Poiint PPoinnts) ppoinnts = PPoinnts; puubliic iint PoiintNNumbber gget retturnn poointts.LLenggth; /实现索索引访问问器 puubliic PP

34、oinnt tthissinnt IIndeex gget retturnn poointtsIIndeex; /感谢谢wattsonn huua(hhttpp:/m/)的的指点 /索索引指示示器的实实质是含含参属性性,参数数并不只只限于iint claass WeaatheerOffWeeek puubliic sstriing thiisiint Inddex gget /注注意caase段段使用rretuurn直直接返回回所以不不需要bbreaak swiitchh (IIndeex) caase 0: retturnn &aamp;quoot;TTodaay iis cclouudy!

35、&ammp;qquott; caase 5: retturnn &aamp;quoot;TTodaay iis tthunnderrshoowerr!&aamp;quoot; deefauult: retturnn &aamp;quoot;TTodaay iis ffinee!&aamp;quoot; puubliic sstriing thiissstriing Dayy gget strringg ToodayyWeaatheer = nuull; /sswittch的的标准写写法 swiitchh (DDay) caase &ammp;qquott;Suundaay&aamp;quoot

36、;: ToddayWWeattherr = &ammp;qquott;Toodayy iss cllouddy!&p;quuot; breeak; caase &ammp;qquott;Frridaay&aamp;quoot;: ToddayWWeattherr = &ammp;qquott;Toodayy iss thhunddersshowwer!&ammp;qquott; breeak; deefauult: ToddayWWeattherr = &ammp;qquott;Toodayy iss fiine!&ammp;qquott; breeak; retturnn Tooday

37、yWeaatheer; claass Proograam sttatiic vvoidd Maain(strringg arggs) PPoinnt tmmpPoointts = neew PPoinnt110; ffor (innt ii = 0; i tmmpPoointts.LLenggth; i+) tmppPoiintssi = neww Poointt(i, Maath.Sinn(i); PPoinnts tmppObjj = neww Poointts(ttmpPPoinnts); ffor (innt ii = 0; i tmmpObbj.PPoinntNuumbeer; i+

38、) Connsolle.WWritteLiine(tmppObjji); sstriing WWeekk = neww sttrinng &ammp;qquott;Suundaay&aamp;quoot;, &aamp;quoot;MMondday&p;quuot;, &p;quuot;Tueesdaay&aamp;quoot;, &aamp;quoot;WWednnesdday&p;quuot;, &p;quuot;Thuursdday&p;quuot;, &p;quuot;Friidayy&ammp;qquott;, &ammp;qquott;Sttau

39、rrdayy&ammp;qquott; WWeattherrOfWWeekk tmmpWeeathherOOfWeeek = nnew WeaatheerOffWeeek(); ffor (innt ii = 0; i 6; i+) Connsolle.WWritteLiine(tmppWeaatheerOffWeeekii); fforeeachh (sstriing tmppDayy inn Weeek) Connsolle.WWritteLiine(tmppWeaatheerOffWeeekttmpDDay); CConssolee.ReeadLLinee(); 复制代码码结果: X:

40、0 , Y: 0 X: 1 , Y: 0.84114700984480778977 X: 2 , YY: 00.90092997422682256882 XX: 33 , Y: 0.11411120000800598867 X: 4 , Y: -00.75568002499530079228 XX: 55 , Y: -0.95889244274466331388 X: 6 , YY: -0.22794415449811989926 X: 7 , Y: 0.65669866598871887899 X: 8 , YY: 00.98893558244662233882 XX: 99 , Y: 0.

41、44121118448522417757 Todday is clooudyy! TTodaay iis ffinee! TTodaay iis ffinee! TTodaay iis ffinee! TTodaay iis ffinee! TTodaay iis tthunnderrshoowerr! TTodaay iis cclouudy! Toodayy iss fiine! Toodayy iss fiine! Toodayy iss fiine! Toodayy iss fiine! Toodayy iss thhunddersshowwer! Toodayy iss fiine!

42、 9.neww 修饰饰符是起起什么作作用? 答: neww 修饰饰符与 neww 操作作符是两两个概念念 neew 修修饰符用用于声明明类或类类的成员员,表示示隐藏了了基类中中同名的的成员。而neew 操操作符用用于实例例化一个个类型 neww 修饰饰符只能能用于继继承类,一一般用于于弥补基基类设计计的不足足 neew 修修饰符和和 ovverrridee 修饰饰符不可可同时用用在一个个成员上上,因为为这两个个修饰符符在含义义上互相相排斥 示例:usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSysttem.Te

43、xxt;nameespaace Exaamplle099 claass BasseCllasss /基类设设计者声声明了一一个PII的公共共变量,方方便进行行运算 puubliic sstattic douublee PII = 3.114155; claass DerrvieeClaass : BBaseeClaass /继承类类发现该该变量的的值不能能满足运运算精度度,于是是可以通通过neew修饰饰符显示示隐藏基基类中的的声明 puubliic nnew staaticc dooublle PPI = 3.141159226; claass Proograam sttatiic vvoid

44、d Maain(strringg arggs) CConssolee.WrriteeLinne(BBaseeClaass.PI); CConssolee.WrriteeLinne(DDervvieCClasss.PPI); CConssolee.ReeadLLinee(); 复制代码码结果: 3.114155 3.141159226 110.tthiss 关键键字的含含义? 答: thiis 是是一个保保留字,仅仅限于构构造函数数和方法法成员中中使用 在类的的构造函函数中出出现表示示对正在在构造的的对象本本身的引引用,在在类的方方法中出出现表示示对调用用该方法法的对象象的引用用,在结结构的构构

45、造上函函数中出出现表示示对正在在构造的的结构的的引用,在在结构的的方法中中出现表表示对调调用该方方法的结结果的引引用 tthiss 保留留字不能能用于静静态成员员的实现现里,因因为这时时对象或或结构并并未实例例化 在在 C# 系统统中,tthiss 实际际上是一一个常量量,所以以不能使使用 tthiss+ 这样的的运算 thiis 保保留字一一般用于于限定同同名的隐隐藏成员员、将对对象本身身做为参参数、声声明索引引访问器器、判断断传入参参数的对对象是否否为本身身 示例例:usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinn

46、g SSysttem.Texxt;nameespaace Exaamplle100 claass Claass11 prrivaate douublee c; prrivaate strringg vaaluee; puubliic ddoubble C gget rretuurn c; puubliic CClasss1(douublee c) /限定定同名的的隐藏成成员 tthiss.c = cc; puubliic CClasss1(Claass11 vaaluee) /用对对象本身身实例化化自己没没有意义义 iif (thiis != vvaluue) c = vaaluee.C; p

47、uubliic ooverrridde sstriing ToSStriing() /将对对象本身身做为参参数 rretuurn strringg.Foormaat(&p;quuot;0 Ceelsiius = 1 Fahhrennheiit&aamp;quoot;, c, UnnitTTrannsCllasss.C22F(tthiss); /由于好好奇,在在这做了了一个效效率测试试,想看看看到底底哪种方方式访问问成员变变量更快快,结论论:区别别不大。 puubliic sstriing Tesst1() llongg vTTickkCouunt = EEnviironnmennt.TT

48、ickkCouunt; ffor (innt ii = 0; i 10000000000; ii+) thiis.vvaluue = i.ToSStriing();retuurn strringg.Foormaat(&p;quuot;Havve tthiss.: 0 MSSEL&p;quuot;, EEnviironnmennt.TTickkCouunt - vvTicckCoountt); puubliic sstriing Tesst2() llongg vTTickkCouunt = EEnviironnmennt.TTickkCouunt; ffor (innt ii =

49、0; i 10000000000; ii+) vallue = ii.TooStrringg(); rretuurn strringg.Foormaat(&p;quuot;Donnt havve tthiss.: 0 MSSEL&p;quuot;, EEnviironnmennt.TTickkCouunt - vvTicckCoountt); claass UniitTrranssClaass puubliic sstattic douublee C22F(CClasss1 vallue) /摄摄氏到华华氏的转转换公式式 rretuurn 1.88 * vallue.C + 322

50、; claass Proograam sttatiic vvoidd Maain(strringg arggs) CClasss1 tmppObjj = neww Cllasss1(337.55); CConssolee.WrriteeLinne(ttmpOObj); CConssolee.WrriteeLinne(ttmpOObj.Tesst1(); CConssolee.WrriteeLinne(ttmpOObj.Tesst2(); CConssolee.ReeadLLinee(); 复制代码码结果: 37.5 CCelssiuss = 99.5 FFahrrenhheitt Haave

51、thiis.: 43375 MSEEL DDont hhavee thhis.: 444066 MSSEL 11.可以使使用抽象象函数重重写基类类中的虚虚函数吗吗? 答答: 可可以,但但需使用用 neew 修修饰符显显式声明明,表示示隐藏了了基类中中该函数数的实现现 示例例:classs BBaseeClaass puubliic vvirttuall vooid F() CConssolee.WrriteeLinne(&p;quuot;BasseCllasss.F&p;quuot;); absstraact claass DeerivveCllasss : BasseCllass

52、s puubliic nnew absstraact voiid FF(); 复制代码码12.密密封类可可以有虚虚函数吗吗? 答答: 可可以,基基类中的的虚函数数将隐式式的转化化为非虚虚函数,但但密封类类本身不不能再增增加新的的虚函数数 示例例:classs BBaseeClaass puubliic vvirttuall vooid F() CConssolee.WrriteeLinne(&p;quuot;BasseCllasss.F&p;quuot;); seaaledd cllasss DeerivveCllasss : BasseCllasss /基类中中的虚函函数F被被隐

53、式的的转化为为非虚函函数 /密封类类中不能能再声明明新的虚虚函数GG /pubblicc viirtuual voiid GG() / / Coonsoole.WriiteLLinee(&aamp;quoot;DDeriiveCClasss.GG&ammp;qquott;); / 复制代码码13.如如果基类类中的虚虚属性只只有一个个属性访访问器,那那么继承承类重写写该属性性后可以以有几个个属性访访问器?如果基基类中有有 geet 和和 seet 两两个呢? 答: 如果果基类中中的虚属属性只有有一个属属性访问问器,那那么继承承类重写写该属性性后也应应只有一一个。如如果基类类中有 gett 和 s

54、ett 两个个属性访访问器,那那么继承承类中可可以只有有一个也也可以同同时有两两个属性性访问器器 144.abbstrractt 可以以和 vvirttuall 一起起使用吗吗?可以以和 ooverrridde 一一起使用用吗? 答: absstraact 修饰符符不可以以和 sstattic、virrtuaal 和和 ovverrridee 修饰饰符一起起使用 15.接口可可以包含含哪些成成员? 答: 接口可可以包含含属性、方法、索引指指示器和和事件,但但不能包包含常量量、域、操作符符、构造造函数和和析构函函数,而而且也不不能包含含任何静静态成员员 166.类和和结构的的区别? 答: 类:

55、类是是引用类类型在堆堆上分配配,类的的实例进进行赋值值只是复复制了引引用,都都指向同同一段实实际对象象分配的的内存 类有构构造和析析构函数数 类可可以继承承和被继继承 结结构: 结构是是值类型型在栈上上分配(虽虽然栈的的访问速速度比较较堆要快快,但栈栈的资源源有限放放),结结构的赋赋值将分分配产生生一个新新的对象象。 结结构没有有构造函函数,但但可以添添加。结结构没有有析构函函数 结结构不可可以继承承自另一一个结构构或被继继承,但但和类一一样可以以继承自自接口 示例: 根据据以上比比较,我我们可以以得出一一些轻量量级的对对象最好好使用结结构,但但数据量量大或有有复杂处处理逻辑辑对象最最好使用用

56、类。 如:GGeoeemtrry(GGIS 里的一一个概论论,在 OGCC 标准准里有定定义) 最好使使用类,而而 Geeomeetryy 中点点的成员员最好使使用结构构usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSysttem.Texxt;nameespaace Exaamplle166 intterffacee IPPoinnt dooublle XX gget; sett; dooublle YY gget; sset; dooublle ZZ gget; sset; /结结构也可可以从接接口继承承 s

57、trructt Poointt: IIPoiint prrivaate douublee x, y, z; /结构也也可以增增加构造造函数 puubliic PPoinnt(ddoubble X, douublee Y, dooublle ZZ) tthiss.x = XX; tthiss.y = YY; tthiss.z = ZZ; puubliic ddoubble X gget rretuurn x; sset xx = vallue; puubliic ddoubble Y gget rretuurn x; sset xx = vallue; puubliic ddoubble Z g

58、get rretuurn x; sset xx = vallue; /在在此简化化了点状状Geoomettry的的设计,实实际产品品中还包包含Prrojeect(坐坐标变换换)等复复杂操作作 claass PoiintGGeommetrry prrivaate Poiint vallue; puubliic PPoinntGeeomeetryy(dooublle XX, ddoubble Y, douublee Z) vvaluue = neew PPoinnt(XX, YY, ZZ); puubliic PPoinntGeeomeetryy(Poointt vaaluee) /结构构的赋值值

59、将分配配新的内内存 tthiss.vaaluee = vallue; puubliic ddoubble X gget rretuurn vallue.X; sset tthiss.vaaluee.X = vvaluue; puubliic ddoubble Y gget rretuurn vallue.Y; sset tthiss.vaaluee.Y = vvaluue; puubliic ddoubble Z gget rretuurn vallue.Z; sset tthiss.vaaluee.Z = vvaluue; puubliic sstattic PoiintGGeommetrr

60、y ooperratoor +(PoointtGeoomettry Lefft, PoiintGGeommetrry RRigtth) rretuurn neww PoointtGeoomettry(Lefft.XX + Riggth.X, Lefft.YY + Riggth.Y, Lefft.ZZ + Riggth.Z); puubliic ooverrridde sstriing ToSStriing() rretuurn strringg.Foormaat(&p;quuot;X: 0, YY: 1, Z: 22&aamp;quoot;, vaaluee.X, vaaluee.Y,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论