• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      虛機(jī)制在《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》中的教學(xué)方法研究

      2015-09-18 01:22:19韋慶清崔如春佛山科學(xué)技術(shù)學(xué)院電子與信息工程學(xué)院佛山528000
      現(xiàn)代計(jì)算機(jī) 2015年15期
      關(guān)鍵詞:基類面向?qū)ο?/a>程序設(shè)計(jì)

      韋慶清,崔如春,李 婭(佛山科學(xué)技術(shù)學(xué)院電子與信息工程學(xué)院,佛山528000)

      虛機(jī)制在《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》中的教學(xué)方法研究

      韋慶清,崔如春,李婭
      (佛山科學(xué)技術(shù)學(xué)院電子與信息工程學(xué)院,佛山528000)

      虛機(jī)制是《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》課程的重要學(xué)習(xí)內(nèi)容。通過分析虛機(jī)制的基本特征,深入探討虛機(jī)制的教學(xué)重點(diǎn)、教學(xué)難點(diǎn)、教學(xué)手段及教學(xué)方法,并根據(jù)該課程的教學(xué)特點(diǎn),給出簡易的應(yīng)用程序?qū)嵗f明虛機(jī)制在面向?qū)ο蟪绦蛟O(shè)計(jì)中的實(shí)際應(yīng)用,從而達(dá)到提高教學(xué)效果并順利完成教學(xué)任務(wù)的目的。

      教學(xué)方法;面向?qū)ο蟪绦蛟O(shè)計(jì);虛機(jī)制

      0 引言

      《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》是大學(xué)本科計(jì)算機(jī)專業(yè)課程,“封裝、繼承及多態(tài)”三大基本特征是《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》課程的重要學(xué)習(xí)內(nèi)容,而貫穿這三大基本特征的學(xué)習(xí)則離不開其特有的虛機(jī)制對象,因此,從虛機(jī)制的基本教學(xué)內(nèi)容出發(fā),正確分析、探討其基本教學(xué)特征;把握其教學(xué)重點(diǎn)和教學(xué)難點(diǎn);設(shè)計(jì)、使用恰當(dāng)?shù)慕虒W(xué)手段和教學(xué)方法;最后實(shí)施并完成好其教學(xué)目標(biāo)是順利完成該課程教學(xué)任務(wù)的重要保證。

      1 虛機(jī)制分析

      在《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》課程的課堂教學(xué)活動過程中,主要圍繞著“封裝、繼承及多態(tài)”三大基本特征來展開相關(guān)知識內(nèi)容的教學(xué),而這三大特征的基本特點(diǎn)、基本原理和關(guān)鍵實(shí)現(xiàn)技術(shù)都離不開其特有的虛機(jī)制對象,常用的虛機(jī)制對象主要有虛函數(shù)、虛析構(gòu)函數(shù)和虛基類等[1]。盡管這三個虛機(jī)制對象都用一個相同的關(guān)鍵字virtual來修飾,但其功能、作用卻完全不同,在面向?qū)ο蟮某绦蛟O(shè)計(jì)過程中,虛函數(shù)主要用來實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性;虛析構(gòu)函數(shù)主要用來實(shí)現(xiàn)動態(tài)聯(lián)編,確保調(diào)用各析構(gòu)函數(shù)使得在撤銷動態(tài)分配空間的同時(shí)能得到正確的處理;而虛基類主要用來實(shí)現(xiàn)共享繼承以消除多重繼承引起的二義性。因此,在具體的教學(xué)活動過程中應(yīng)分別設(shè)計(jì)、處理好各虛機(jī)制對象的實(shí)際教學(xué)。

      2 虛機(jī)制的課堂教學(xué)過程

      課堂教學(xué)是整個課程教學(xué)中的重要環(huán)節(jié),在這個環(huán)節(jié)中應(yīng)該充分利用好課堂的45分鐘時(shí)間,盡最大可能發(fā)揮好課堂教學(xué)的作用。因此,根據(jù)各不同的虛機(jī)制對象,應(yīng)選擇恰當(dāng)?shù)慕虒W(xué)方法來完成其課堂教學(xué)任務(wù)。

      2.1虛函數(shù)

      虛函數(shù),主要圍繞其基本概念、功能及應(yīng)用等三方面內(nèi)容進(jìn)行,重點(diǎn)講解什么是虛函數(shù),該函數(shù)有哪些基本特點(diǎn)、基本功能作用和實(shí)際應(yīng)用,難點(diǎn)在于設(shè)計(jì)恰當(dāng)?shù)某绦虼a以說明虛函數(shù)在實(shí)際程序設(shè)計(jì)中的具體應(yīng)用,并選擇講授法、討論法和演示法作為主要教學(xué)方法。虛函數(shù)具體的教學(xué)過程設(shè)計(jì)如下:

      虛函數(shù)(virtual function)就是在一個類中用保留字virtual來定義的非靜態(tài)成員函數(shù)?;惖奶摵瘮?shù)在其派生類中仍然是虛函數(shù),并且一般需要在派生類中重定義。一個含有虛函數(shù)的類稱為多態(tài)類,無論這些虛函數(shù)是繼承下來的還是在派生類中新增加的[2]。在基類中說明虛函數(shù)的方法是:

      virtual<函數(shù)返回類型><函數(shù)名>(<參數(shù)表>){…}

      一個類的虛函數(shù)僅對派生類中重定義的函數(shù)起作用,而對其他函數(shù)沒有影響。在基類中使用虛函數(shù)保證通過指向基類的指針調(diào)用基類的一個虛函數(shù)時(shí),C++編譯系統(tǒng)對該調(diào)用進(jìn)行動態(tài)綁定,而使用普通函數(shù)則是靜態(tài)綁定。

      在派生類中重新定義虛函數(shù)時(shí),要求函數(shù)原型必須與其在基類中的原型(函數(shù)返回類型、函數(shù)名、函數(shù)參數(shù)個數(shù)及其類型)完全一致。此外,還必須借助于基類指針才得以動態(tài)聯(lián)編進(jìn)而實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性。否則,虛函數(shù)將按靜態(tài)聯(lián)編方式調(diào)用[3]。

      值得注意的是,函數(shù)重定義與函數(shù)重載不同,它們是兩個不同的概念,具體定義時(shí)要注意其區(qū)別。以下實(shí)例程序代碼說明虛函數(shù)在多態(tài)中的應(yīng)用。

      #include<iostream.h>

      class BASE{

      public:

      virtual void fun1()

      {cout<<"這是基類的虛函數(shù)fun1()."<<endl;}//在基類中定義一個虛函數(shù)fun1()

      virtual void fun2()

      {cout<<"這是基類的虛函數(shù)fun2()."<<endl;}//在基類中定義另一個虛函數(shù)fun2()

      void fun3()

      {cout<<"這是基類的普通函數(shù)fun3()."<<endl;}//在基類中定義一個普通函數(shù)fun3()

      };

      class DERIVED:public BASE{

      public:

      void fun1()

      {cout<<"這是派生類的虛函數(shù)fun1()."<<endl;}//在派生類中重定義虛函數(shù)fun1()

      void fun2(inta)

      {cout<<"這是派生類的成員函數(shù)fun2()."<<endl;}//在派生類中重載fun2(),虛特性丟失

      void fun3()

      {cout<<"這是派生類的普通函數(shù)fun3()."<<endl;}//在派生類中定義普通函數(shù)fun3()

      };

      voidmain(){

      BASE*p;DERIVED d;

      p=&d;//定義基類指針指向派生類對象

      p->fun1();//調(diào)用的是DERIVED::fun1(),動態(tài)聯(lián)編

      p->fun2();//調(diào)用的是BASE::fun2(),靜態(tài)聯(lián)編,虛特性丟失

      p->fun3();//調(diào)用的是BASE::fun3(),靜態(tài)聯(lián)編}

      程序運(yùn)行結(jié)果如圖1所示:

      圖1 虛函數(shù)在多態(tài)中的應(yīng)用

      由此可見,在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,虛函數(shù)是實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性不可缺少的前提條件。

      2.2虛析構(gòu)函數(shù)

      在對虛析構(gòu)函數(shù)所進(jìn)行的教學(xué)活動設(shè)計(jì)過程中,應(yīng)把該函數(shù)的基本概念和基本功能特征等內(nèi)容作為教學(xué)重點(diǎn)講解,而把設(shè)計(jì)一個程序?qū)嵗鳛榻虒W(xué)難點(diǎn),用來加以分析說明虛析構(gòu)函數(shù)在類封裝中的實(shí)際應(yīng)用,并選擇講授法、對比法和演示法作為主要教學(xué)方法。虛析構(gòu)函數(shù)具體的教學(xué)過程設(shè)計(jì)如下:

      什么是虛析構(gòu)函數(shù)?虛析構(gòu)函數(shù)是指在析構(gòu)函數(shù)前加上關(guān)鍵字virtual進(jìn)行說明,則該析構(gòu)函數(shù)稱為虛析構(gòu)函數(shù)。例如:

      class A{

      virtual~A(){…}//則為類A聲明了一個虛析構(gòu)函數(shù)

      };

      通常,習(xí)慣將基類的析構(gòu)函數(shù)聲明為虛析構(gòu)函數(shù)。當(dāng)基類的析構(gòu)函數(shù)聲明為虛析構(gòu)函數(shù)時(shí),無論指針指的是同類族中的哪一個類對象,系統(tǒng)會采用動態(tài)關(guān)聯(lián),調(diào)用相應(yīng)的析構(gòu)函數(shù),對該對象執(zhí)行清理工作,這樣能更好避免內(nèi)存泄漏現(xiàn)象[4]。以下程序代碼說明虛析構(gòu)函數(shù)的具體應(yīng)用。

      #include<iostream.h>

      class A{

      public:

      virtual~A(){cout<<"這是類A的虛析構(gòu)函數(shù)"<<endl;} //類A聲明的虛析構(gòu)函數(shù)

      //~A(){cout<<"這是類A的析構(gòu)函數(shù)"<<endl;}

      };

      class B:public A{

      public:

      B(){ptr=new int[20];}

      virtual~B(){//類B聲明的虛析構(gòu)函數(shù)

      cout<<"這是類B的虛析構(gòu)函數(shù)"<<endl;

      delete[]ptr;

      }

      //~B(){cout<<"這是類B的析構(gòu)函數(shù)"<<endl;delete[]ptr;} private:int*ptr;

      };

      intmain(){

      A*p=new B;

      delete p;

      return 0;

      }

      程序運(yùn)行結(jié)果如圖2所示:

      圖2 虛析構(gòu)函數(shù)的應(yīng)用

      如果將上述程序代碼中類A和類B所聲明的虛析構(gòu)函數(shù)改為析構(gòu)函數(shù),則程序運(yùn)行結(jié)果僅顯示:這是類A的虛析構(gòu)函數(shù)。顯然,在執(zhí)行delete p;語句時(shí)并沒有調(diào)用到類B的析構(gòu)函數(shù),因而引起內(nèi)存泄漏。所以,通常是將基類的析構(gòu)函數(shù)聲明為虛析構(gòu)函數(shù),這樣在用delete釋放資源的時(shí)候,確保析構(gòu)函數(shù)會被正確調(diào)用。

      2.3虛基類

      虛基類與前面所講授的虛函數(shù)、虛析構(gòu)函數(shù)相似。其具體的教學(xué)過程設(shè)計(jì)如下。

      為什么要引入虛基類?因?yàn)樵诨贑++的面向?qū)ο蟪绦蛟O(shè)計(jì)的實(shí)際應(yīng)用中,若在多重繼承時(shí)沒有作特殊聲明,此時(shí)采用的是復(fù)制繼承,會導(dǎo)致重復(fù)繼承所帶來的二義性問題。下面引入一個程序代碼作分析說明。#include<iostream.h>

      class BASE{public:int i;};

      class BASE1:public BASE{public:int j;};

      class BASE2:public BASE{public:int k;};

      class DERIVED:public BASE1,public BASE2{public:int sum;};

      void main(){

      DERIVED obj;//聲明一個派生類對象

      //obj.i=3;//編譯錯誤,編譯程序無法確定使用i的哪一份副本

      obj.j=5;//編譯正確,使用從BASE1繼承下來的j

      obj.k=7;//編譯正確,使用從BASE2繼承下來的k}

      通常,C++語言有兩種方法解決這種二義性問題。第一種方法是采用作用域運(yùn)算符“::”來解決,但這不是一種很好的解決途徑;另一種方法是使用虛基類機(jī)制(Virtual Base Class)來解決。虛基類可以保證在任何派生類中只提供一個基類的副本,達(dá)到消除二義性問題的目的。

      虛基類是當(dāng)基類被繼承時(shí),在基類的繼承訪問控制關(guān)鍵字前面加上關(guān)鍵字virtual來定義的。聲明虛基類的方法是:class派生類:virtual訪問權(quán)限修飾符父類名{…};

      現(xiàn)使用虛基類將上面程序代碼修改如下:

      #include<iostream.h>

      class BASE{public:int i;};

      class BASE1:virtual public BASE{public:int j;};

      class BASE2:virtual public BASE{public:int k;};

      class DERIVED:public BASE1,public BASE2{public:int sum;};

      void main(){

      DERIVED obj;//聲明一個派生類對象

      obj.i=3;//編譯正確,

      obj.j=5;//編譯正確,使用從BASE1繼承下來的j

      obj.k=7;//編譯正確,使用從BASE2繼承下來的k

      }

      可見,普通基類與虛基類之間的唯一區(qū)別只有在派生類重復(fù)繼承了某一基類時(shí)才表現(xiàn)出來,虛基類用于實(shí)現(xiàn)共享繼承。該程序代碼所實(shí)現(xiàn)的共享繼承如圖3所示,其相應(yīng)的對象存儲結(jié)構(gòu)分配如圖4所示:

      圖3 共享繼承示意圖

      圖4 對象存儲結(jié)構(gòu)分配圖

      (1)必須在最新派生出來的派生類的初始化列表中調(diào)用虛基類的構(gòu)造函數(shù),以初始化在虛基類中定義的數(shù)據(jù)成員;

      (2)注意在調(diào)用各構(gòu)造函數(shù)時(shí),最先調(diào)用虛基類的構(gòu)造函數(shù),再調(diào)用其他構(gòu)造函數(shù);

      (3)虛基類的構(gòu)造函數(shù)僅調(diào)用一次[5]。

      3 虛機(jī)制的應(yīng)用實(shí)踐過程

      盡管在課堂上講授了面向?qū)ο蟪绦蛟O(shè)計(jì)C++中虛機(jī)制的基本特征、功能作用等基本理論基礎(chǔ)知識,但要學(xué)生在短時(shí)間內(nèi)很好理解、掌握并能實(shí)際應(yīng)用,還必須經(jīng)過編程訓(xùn)練這一課外實(shí)踐環(huán)節(jié),從而延伸、反轉(zhuǎn)課堂,以學(xué)生為主,逐步引導(dǎo)學(xué)生將其基本思想、理論和技術(shù)綜合應(yīng)用到實(shí)際程序開發(fā)設(shè)計(jì)中。在此,通過一個案例設(shè)計(jì)來分析說明虛機(jī)制在面向?qū)ο蟪绦蛟O(shè)計(jì)中的綜合應(yīng)用。

      實(shí)例:將虛函數(shù)、虛析構(gòu)函數(shù)和虛基類這三個虛機(jī)制對象綜合應(yīng)用到一個實(shí)際的面向?qū)ο蟪绦蛟O(shè)計(jì)中。

      程序代碼說明如下:

      #include<iostream.h>

      #include<string.h>

      class Person{//定義基類

      protected:char*name;

      int age;

      public:Person(char*nm,inta){

      name=new char[strlen(nm)+1];

      strcpy(name,nm);

      age=a;

      }

      virtual~Person(){delete[]name;}//聲明基類的虛析構(gòu)函數(shù)

      virtual void show(){cout<<name<<""<<age<<"";} //聲明虛函數(shù)

      };

      class Student:virtual public Person{//聲明由虛基類派生

      protected:char*number;

      int score;

      public:

      Student(char*nm,int a,char*no,int sc):Person(nm,a){

      number=new char[strlen(no)+1];

      strcpy(number,no);

      score=sc;

      }

      virtual~Student(){delete[]number;}//聲明派生類的虛析構(gòu)函數(shù)

      void show(){//虛函數(shù)重定義

      Person::show();

      cout<<number<<""<<score<<end l;

      }

      };

      class Staff:virtual public Person{//聲明由虛基類派生

      protected:char*idnumber;

      floatwage;

      public:

      Staff(char*nm,inta,char*id,floatw):Person(nm,a){

      idnumber=new char[strlen(id)+1];

      strcpy(idnumber,id);

      wage=w;

      }

      virtual~Staff(){delete[]idnumber;}//聲明派生的虛析構(gòu)函數(shù)

      void show(){//虛函數(shù)重定義

      Person::show();

      cout<<idnumber<<""<<wage<<endl;

      }

      };

      class StaffStudent:public Staff,public Student{//多重繼承

      public:

      StaffStudent(char*nm,inta,char*id,floatw,char*no,int sc):

      Staff(nm,a,id,w),Student(nm,a,no,sc),Person(nm,a){}

      void show(){//虛函數(shù)重定義

      Person::show();

      cout<<idnumber<<""<<wage<<""<<number<<""<<score<<""<<endl;

      }

      };

      voidmain(){

      Person*p;

      Student st("李剛",19,"20151301",560);

      Staff sf("王艷",29,"010",3500.9);

      StaffStudent ss("鄧軍",25,"014",4500.5,"20151306",580);

      p=&st;

      p->show();//實(shí)現(xiàn)多態(tài)

      p=&sf;

      p->show();

      p=&ss;

      p->show();

      }

      程序運(yùn)行結(jié)果如圖5所示:

      圖5 虛機(jī)制的綜合應(yīng)用

      4 結(jié)語

      綜上所述,虛機(jī)制貫穿著《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》教學(xué)過程的始終,而虛機(jī)制特征主要通過虛函數(shù)、虛析構(gòu)函數(shù)和虛基類等這三個虛機(jī)制對象來具體實(shí)現(xiàn)。因此,在實(shí)際的教學(xué)活動過程中,應(yīng)該設(shè)計(jì)并使用靈活、恰當(dāng)?shù)慕虒W(xué)手段和教學(xué)方法來完成這三個虛機(jī)制對象的具體教學(xué)任務(wù),以利于指導(dǎo)學(xué)生更好地理解、掌握虛機(jī)制對象的基本功能特征及其應(yīng)用,并有效激發(fā)學(xué)生的學(xué)習(xí)興趣,從而達(dá)到提高本課程教學(xué)質(zhì)量、取得良好教學(xué)效果的目的。

      [1]甘玲,邱勁.面向?qū)ο蠹夹g(shù)與Visual C++[M].北京:清華大學(xué)出版社,2006:4~7

      [2]李師賢,李文軍,周曉聰,等.面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)(第二版)[M].北京:高等教育出版社,2011:316~318

      [3]張冰.面向?qū)ο蟪绦蛟O(shè)計(jì)C++語言編程[M].北京:機(jī)械工業(yè)出版社,2008:154~155

      [4]譚浩強(qiáng).C++程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2004:407~408

      [5]張海藩,牟永敏.面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)用教程(第二版)[M].北京:清華大學(xué)出版社,2007:165~167

      Teaching Method;Object-Oriented Programming;VirtualMechanism

      Research on the Method of VirtualMechanism in Object-Oriented Programm ing C++Course

      WEIQing-qing,CUIRu-chun,LIYa
      (School of Electronics and Information Engineering,Foshan University,Foshan 528000)

      Virtualmechanism is the important study content in the Object-Oriented Programming C++course.Analyses the basic characteristics of virtualmechanism,and explores teaching emphasis,teaching difficulties,teachingmeans and teachingmethods of the virtualmechanism. Combiningwith the characteristics of the course learning,gives specific application examples to show the practical application of the virtualmechanism in object-oriented program design.Improves the teaching effectand completes the teaching task successfully.

      1007-1423(2015)15-0021-06

      10.3969/j.issn.1007-1423.2015.15.006

      韋慶清(1966-),女,廣西河池人,碩士,講師,研究方向?yàn)橛?jì)算機(jī)應(yīng)用

      崔如春(1965-),男,湖南沅江人,碩士,副教授,研究方向?yàn)橛?jì)算機(jī)應(yīng)用

      李婭(1978-),女,湖北黃石河人,碩士,講師,研究方向?yàn)橹悄軆?yōu)化算法

      2015-04-21

      2015-05-06

      猜你喜歡
      基類面向?qū)ο?/a>程序設(shè)計(jì)
      基于C#面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝、繼承和多態(tài)分析
      基于Visual Studio Code的C語言程序設(shè)計(jì)實(shí)踐教學(xué)探索
      從細(xì)節(jié)入手,談PLC程序設(shè)計(jì)技巧
      電子制作(2019年9期)2019-05-30 09:42:04
      面向?qū)ο蟮挠?jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)軟件系統(tǒng)的開發(fā)
      電子測試(2018年15期)2018-09-26 06:01:34
      面向?qū)ο蟮臄?shù)據(jù)交換協(xié)議研究與應(yīng)用
      高職高專院校C語言程序設(shè)計(jì)教學(xué)改革探索
      空戰(zhàn)游戲設(shè)計(jì)實(shí)例
      面向?qū)ο骔eb開發(fā)編程語言的的評估方法
      一種基于用戶興趣的STC改進(jìn)算法
      PLC梯形圖程序設(shè)計(jì)技巧及應(yīng)用
      万宁市| 洮南市| 达日县| 郧西县| 陇川县| 新安县| 中牟县| 鄄城县| 大田县| 沁阳市| 土默特左旗| 贡山| 法库县| 泾源县| 岗巴县| 建阳市| 石屏县| 迁西县| 寿阳县| 健康| 海林市| 桐乡市| 阿拉善左旗| 曲麻莱县| 马关县| 永丰县| 阿拉尔市| 犍为县| 井研县| 阜南县| 普格县| 巍山| 和政县| 福建省| 上饶县| 哈尔滨市| 南昌市| 孟州市| 韶山市| 尖扎县| 塘沽区|