程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 深度了解C++編程技巧說明介紹

深度了解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++的“非本質復雜性”。

  • 探索豐富多彩的C++技術內幕手記
  • 深度剖析C++代碼編制和語句序列介紹
  • 漫談在Visual C++環境下進行編程
  • 高級學者講述C++語言編程技巧
  • 探秘靈活性的C/C++語言命令說明

當然,我自己憑感覺就能知道,而接觸C++一段時間的人大致也能知道,但新手乃至非新手則對我所謂的“非本質復雜性”根本沒有一個具體的認識,這就使得那篇“Why C++脫離了原本的意圖——面向所有C++使用者和學習者。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved