深度了解C++编程技巧说明介绍

开发 后端
在Web开发上,C++没有多大的市场。在企业级的应用上,以Java、.NET(C#是其中重要的一员)居多,C++仍然占有一席之地。

C++中,Windows类中的Sort方法将成为ListBox类中Sort方法的基础方法,在期望调用Windows类中的Sort方法时,ListBox类中的Sort方法就会被调用。在C#中,虚拟函数总是被认为是虚拟调度的根。也就是说,一旦C#发现一个虚拟的方法,就不会再在虚拟链中查找其他虚拟方法。假如ListBox再次被编译,编译器就会生成一个警告信息:

  1. "class1.cs(54,24): warning CS0114: 'ListBox.Sort()' hides  
  2. inherited member 'Window.Sort()'. 

要使当前的成员覆盖原来的方法,就需要添加override关健字,或者添加new关健字。要消除警告信息,编程人员必须搞清楚他想干什么。可以在ListBox类中的Sort方法前添加new,表明它不该当覆盖Window中的虚方法:

  1. public class ListBox : Window {  
  2. public new virtual void Sort() {"} 

这样就可以清除警告信息。假如编程人员确实期望覆盖掉Window中的方法,就必须使用override关健字来显性地表明其意图。

  1. Employee::Employee(int theAge, int theSalaryLevel):  
  2. Person(theAge) // 初始化基础类  
  3. salaryLevel(theSalaryLevel) // 初始化成员变量  
  4. {  
  5. // 构造器的代码  
  6. }  

C#中的初始化与C++中不同。假设有一个带有private性质的成员变量age的Person类,Employee是由继续Person类而生成的,它有一个private性质的salaryLevel成员变量。在C++中,我们可以在Employee的构造器的初始化部分初始化salaryLevel,如下面的代码所示:

  1. Class Employee : public Person  
  2. { // 成员变量的定义  
  3. private salaryLevel = 3; // 初始化  

这种方法在C#中是非法的。尽管仍然可以初始化基础类,但象上面的代码那样对成员变量初始化就会引起编译错误。在C#中,我们可以在定义成员变量时的同时对它进行初始化注重:必须明确地定义每个变量的访问权限。

但看了无数篇阐述C++复杂性的文章,和争论C++复杂性的吐沫星子(包括我前段时间写的两篇关于C++的总结)。我始终都有一个感觉——没分析透,就跟盲人摸象一样。正如“Why C++的一位读者批评的,我在文章里面没有写明到底哪些是C++的“非本质复杂性”。#t#

当然,我自己凭感觉就能知道,而接触C++一段时间的人大致也能知道,但新手乃至非新手则对我所谓的“非本质复杂性”根本没有一个具体的认识,这就使得那篇“Why C++脱离了原本的意图——面向所有C++使用者和学习者。

责任编辑:chenqingxiang 来源: 天极
相关推荐

2010-01-13 10:16:42

C++软件

2010-01-28 16:05:09

C++风格与技巧

2010-01-11 09:56:07

C++编程实例

2010-01-12 10:40:22

C++程序员

2010-01-13 15:51:44

C++编程语言

2011-05-30 15:29:32

C++

2009-11-05 15:43:02

Visual Stud

2010-01-13 16:08:31

C++语言

2010-03-05 13:34:54

2010-01-26 17:11:13

C++编程

2010-01-25 18:19:17

C++特性

2010-01-11 15:55:51

C++语言

2010-02-24 16:44:58

Python 函数

2010-01-19 17:54:47

C++程序

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性

2010-01-11 10:28:51

C++编程

2011-07-10 15:26:54

C++

2010-01-18 10:16:58

学习C++

2011-07-13 16:36:11

C++
点赞
收藏

51CTO技术栈公众号