2023年繼承與多態(tài)實驗報告_第1頁
2023年繼承與多態(tài)實驗報告_第2頁
2023年繼承與多態(tài)實驗報告_第3頁
2023年繼承與多態(tài)實驗報告_第4頁
2023年繼承與多態(tài)實驗報告_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

計算機課程實驗報告2023—2023學年度第一學期系別:數(shù)學與計算機科學學院實驗課程C++面向?qū)ο蟪绦蛟O計班級級計算機科學與技術(shù)學號11姓名蔡興明指導教師馬學梅實驗題目繼承與多態(tài)(一)日期2023-9-29實驗目的及規(guī)定1、理解繼承在面向?qū)ο蟪绦蛑械闹匾饔谩⒗^承和派生的概念;2、掌握通過繼承派生一個新類的方法;3、理解多態(tài)的概念、運算符重載的概念、虛函數(shù)的作用;4、學習實現(xiàn)多態(tài),掌握幾種常用運算符的重載;;5、掌握虛函數(shù)的定義和使用方法;6、簡樸面向?qū)ο蟪绦虻木帉憣嶒瀮?nèi)容及具體環(huán)節(jié):內(nèi)容1:函數(shù)重載(1)構(gòu)造函數(shù)重載,運營以下程序,#include<iostream.h>classCOMPLEX{public:?COMPLEX(doubler=0,doublei=0);COMPLEX(constCOMPLEX&other);voidprint();COMPLEXadd(constCOMPLEX&other);COMPLEXsubs(constCOMPLEX&other);protected:doublereal,image;};COMPLEX::COMPLEX(doubler,doublei){real=r;image=i;return;}COMPLEX::COMPLEX(constCOMPLEX&other){real=other.real;image=other.image;return;}voidCOMPLEX::print(){cout<<real;if(image>0)cout<<“+”<<image<<“i”;elseif(image<0)cout<<image<<“i”;cout<<“\n”;return;}COMPLEXCOMPLEX::add(constCOMPLEX&other){real=real+other.real;image=image+other.image;return*this;}COMPLEXCOMPLEX::subs(constCOMPLEX&other){real=real-other.real;image=image-other.image;return*this;}intmain(){COMPLEXc1(1,2);COMPLEXc2(2);COMPLEXc3(c1);c3.print();c2.add(c1);c3.subs(c2);c3.print();return0;}給出輸出結(jié)果,分析this的用途.在此程序的基礎(chǔ)上實現(xiàn)運算符”+”和”-“的重載this是自身的地址,但是*this就是自身了.是按值回返了.假如函數(shù)的回返值是帶有&號的,那么回返值就是引用了構(gòu)造出五個公共類函數(shù),此函數(shù)在運營時沒有出現(xiàn)問題,但是我通過仔細閱讀理解程序的過程中,重要對這個this的用途和用法在網(wǎng)上查閱學習了下,一種情況就是,在類的非靜態(tài)成員函數(shù)中返回類對象自身的時候,直接使用return*this;此外一種情況是當參數(shù)與成員變量名相同時,如this->n=n(不能寫成n=n)。(2)運算符重載:以下程序規(guī)定實現(xiàn)運算符++的前置和后置重載,但事實上并沒有實現(xiàn)。試分析因素,并作出修改,以實現(xiàn)此功能。#include<iostream.h>classOperClass{intx;public: OperClass();OperClassoperat(yī)or++();OperClassoperator++(int);voiddisplay();};OperClass::OperClass(){x=0;return;}OperClassOperClass::operator++(){OperClassA;++x;A.x=x;returnA;}OperClassOperClass::operator++(int){OperClassA;x++;A.x=x;returnA;}voidOperClass::display(){cout<<“x=“<<x<<endl;}voidmain(){OperClassX,Y;X.display();++X;Y=++X;Y++.display();}內(nèi)容2:重載<,>,==:設計字符串類String,用來存放不定長的字符串,重載運算符“==”,“>”,“<”,用于兩個字符串的大于、小于和等于的比較運算。提醒:(1)屬于雙目運算符,在重載雙目運算符時,函數(shù)中應當有兩個參數(shù)。(2)String類成員變量應為字符型指針;(3)多個構(gòu)造函數(shù)的定義;測試數(shù)據(jù):1.Chinachina2.NationalComputer3.Examinat(yī)ionRank4.swustswust#include<string.h>classCString{public: friendintmain(); CString();?CString(CString&s); CString(char*s);?friendbooloperator>(CStrings1,CStrings2);?friendbooloperat(yī)or<(CStrings1,CStrings2); friendbooloperator==(CStrings1,CStrings2);voiddisplay();?~CString();private:?char*str;};CString::CString(){?str=NULL;}CString::CString(CString&s){ str=newchar[strlen(s.str)+1];?if(str!=NULL) { ?strcpy(str,s.str); }}CString::CString(char*s){?str=newchar[strlen(s)+1]; if(str!=NULL) { ?strcpy(str,s); }}booloperator>(CStrings1,CStrings2){ if(strcmp(s1.str,s2.str)>0) returntrue; else returnfalse;}booloperat(yī)or<(CStrings1,CStrings2){?if(strcmp(s1.str,s2.str)<0) returntrue;?else ?returnfalse;}booloperator==(CStrings1,CStrings2){ if(strcmp(s1.str,s2.str)==0)??returntrue; else returnfalse;}intmain(){?voidUpdat(yī)e1(CString&s1,CString&s2); CStrings1("China"),s2("National"),s3("Examination"); cout<<"s1:";s1.display(); cout<<"s2:";s2.display(); cout<<"s3:";s3.display(); if(s1>s2) {??cout<<"s1大于s2"; ?cout<<endl;?} elseif(s1<s2) {cout<<"s1小于s2";?cout<<endl;?}?else { ?cout<<"s1等于s2"; cout<<endl;?}return0;}此程序一方面構(gòu)造了7個函數(shù)friendintmain();CString();CString(CString&s);CString(char*s);friendbooloperat(yī)or>(CStrings1,CStrings2);friendbooloperat(yī)or<(CStrings1,CStrings2);friendbooloperator==(CStrings1,CStrings2);然后定義字符串,再給字符串賦值為空,再分別用<,>,==重載函數(shù)比較運算字符串,最后通過intmain()函數(shù)輸出結(jié)果。內(nèi)容3.繼承#include<iostream.h>classMammal{?privat(yī)e:?intage; intweight;?public:??Mammal(intage,intweight);??intgetAge();? intgetWeight();};Mammal::Mammal(intage,intweight){ this->age=age;?this->weight=weight;}intMammal::getAge(){returnage;}intMammal::getWeight(){returnweight;}classDog:publicMammal//classDogisaderivedclassofMammal{?privat(yī)e:inthairColor;//1-white;2-black;3-othercolor public:Dog(intage,intweight,inthairColor);intgetColor();};Dog::Dog(intage,intweight,intcolor):Mammal(age,weight)//在此初始化基類{hairColor=color;}intDog::getColor(){returnhairColor;}voidmain(){?Dogd(8,20,1);?cout<<"age="<<d.getAge()<<endl; cout<<"weight="<<d.getWeight()<<endl;?cout<<"color="<<d.getColor()<<endl;}此程序中父類Mammal有兩個私有類變量,三個公共類函數(shù),Dog類是Mammal類的子類,從而調(diào)用子類實現(xiàn)了函數(shù)的繼承;此程序代碼在運營的過程中沒有碰到任何的錯誤;從函數(shù)中我更深的了解到繼承的概念以及如何使用,繼承是存在于面向?qū)ο蟪绦蛟O計中的兩個類之間的一種關(guān)系,是面向?qū)ο蟪绦蛟O計方法的一個重要手段,通過繼承可以更有效地組織程序結(jié)構(gòu),明確類間的關(guān)系,充足運用已有的類來完畢更復雜、更進一步的開發(fā)。內(nèi)容4多態(tài)#include<iostream.h>classCshape{public:voidSetColor(intcolor){?m_nColor=color;}voidvirtualDisplay(void){?cout<<"Cshape"<<endl;}privat(yī)e:intm_nColor;};classCrectangle:publicCshape{public:voidvirtualDisplay(void){ cout<<"Crectangle"<<endl;}};classCtriangle:publicCshape{voidvirtualDisplay(void){?cout<<"Ctiangle"<<endl;}};classCellipse:publicCshape{public:voidvirtualDisplay(void) { ??cout<<"Cellipse"<<endl;? }};voidmain(){Cshapeobshape;CellipseobEllipse;CtriangleobTriangle;CrectangleobRectangle;Cshape*pShape[4]={&obshape,&obEllipse,&obTriangle,&obRectangle};for(intI=0;I<4;I++)pShape[I]->Display();}3.實驗結(jié)論:此函數(shù)一方面構(gòu)造兩個公共類函數(shù),一個私有類變量,然后依依實現(xiàn)函數(shù);此程序代碼運營時出現(xiàn)幾個問題,通過查詢網(wǎng)絡,unknowncharacter'0xa1'就是指是輸入程序的時候鍵入的是全角符號的空格,注意切換全/半角為半角狀態(tài),將該行程序重新鍵入就可以了。尚有一個小問題就是將obshape中的s寫成了大寫S,改過來后就運營成功了;errorC2023:unknowncharacter'0xa1'errorC2023:unknowncharacter'0xa1'errorC2023:unknowncharacter'0xa1'errorC2023:unknowncharacter'0xa1'errorC2065:'obShape':undeclaredidentifiererrorC2440:'initializing':cannotconvertfrom'int*'to'classCshape*'內(nèi)容3、重載加減法設計CTime類1、成員變量:hour、minute、second;2、多個構(gòu)造函數(shù):顯示函數(shù):Display()3、重載++運算符,模擬鐘表走動,每次走一秒,每60秒進一分鐘,秒又從0開始計算;每60分鐘進一小時,分鐘從0開始計算。提醒:1、++運算符為單目運算符,運算符重載函數(shù)只有一個參數(shù),假如運算符重載函數(shù)為成員函數(shù),還可省略此參數(shù);2、++有兩種使用方式:前置自增運算符和后置自增運算符,為了區(qū)別兩者,在自增運算符重載函數(shù)中,增長一個int型形參,即為后置運算符函數(shù);測試數(shù)據(jù):1、時間:13:45:392、時間:23:58:5程序代碼:#include<iostream.h>classTime{private:inthour,minute,second;public:Time(){}Time(inth,intm,ints){ hour=h; minute=m;?second=s;}intgethour(){returnhour;}intgetminute(){returnminute;}intgetsecond(){returnsecond;}friendTimeoperator+(Timea,Timeb);friendTimeoperator++(Time&c);voiddisplay(){

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論