第一篇:信息系C++實(shí)驗(yàn)報(bào)告(練習(xí))
信息工程系課程實(shí)驗(yàn)報(bào)告
姓
名
學(xué)
號(hào)
實(shí)驗(yàn)學(xué)時(shí) 2 實(shí)驗(yàn)時(shí)間 2017 年 12 月 15 日
實(shí)驗(yàn)地點(diǎn)
指導(dǎo)教師
課程名稱 C++程序設(shè)計(jì) 專
業(yè)班
級(jí)
成績
實(shí)驗(yàn)項(xiàng)目 運(yùn)算符重載、虛函數(shù)、純虛函數(shù)、抽象類 實(shí) 驗(yàn) 目 的 1、理解運(yùn)算符重載的作用; 2、掌握實(shí)現(xiàn)運(yùn)算符重載的方法; 3、理解虛函數(shù)、純虛函數(shù)、抽象類的特性 4、掌握利用虛函數(shù)實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性的方法 實(shí) 驗(yàn) 內(nèi) 容 和 要 求 1、閱讀“程序 1.txt”,分析程序運(yùn)行結(jié)果,然后上機(jī)調(diào)試驗(yàn)證分析結(jié)果。
2、閱讀“程序 2.txt”,分析程序運(yùn)行結(jié)果,然后上機(jī)調(diào)試驗(yàn)證分析結(jié)果。
以上二題不用抄題也不用寫分析結(jié)果
3、閱讀“程序 3.txt”,然后回答以下問題:
1)行 A、行 B、行 E 的輸出結(jié)果分別是、、,為什么是這樣的輸出結(jié)果
2)將行 A 改成 p->X::f();,其輸出結(jié)果為:,為什么
3)將行 C 改成 A *p=&a;,行 A 調(diào)用類
的 f 函數(shù),輸出,行 B 調(diào)用類的 g 函數(shù),輸出
,行 E 調(diào)用類的k 函數(shù),輸出。
4)將行 C 改成 A *p=&a;,后,要想調(diào)用基類 X 的 g 函數(shù),行 B 應(yīng)改為
以上一題不用抄題,只需寫答案在答題紙上。
4、定義一個(gè)類 matadd,其中數(shù)據(jù)成員為一個(gè) M*N 的矩陣(即二維數(shù)組),其中 M 和 N 是兩個(gè)預(yù)先定義的符號(hào)常數(shù)或常變量。通過重載運(yùn)算符“+”和“=”,實(shí)現(xiàn)矩陣相加和賦值運(yùn)算。例如定義矩陣A = [ 12 34 5 6 ]和 B = [2 2 23 3 3 ],通過運(yùn)算 C=A+B,得到結(jié)果矩陣C = [ 34 57 8 9 ]。
具體要求如下:
(1)私有數(shù)據(jù)成員:int a[M][N],存放二維數(shù)組的值(2)公有成員函數(shù):
matadd():缺省構(gòu)造函數(shù),初始化數(shù)據(jù)成員 a[M][N]為 0。
matadd(int x[M][N]):構(gòu)造函數(shù),用 x 初始化數(shù)據(jù)成員 a。
matadd operator +(matadd &A, matadd &B):重載加法運(yùn)算符“+”,實(shí)現(xiàn)兩個(gè)矩陣相加(要求為友元函數(shù))
void operator =(matadd &B):重載賦值運(yùn)算符“=”,實(shí)現(xiàn)兩個(gè)矩陣賦值(要求為成員函數(shù))
void show():按二維方式輸出 a 數(shù)組。
(3)在主函數(shù)中完成對(duì)該類的測試。注意:在程序的開頭,定義符號(hào)常數(shù)或常變量 M 和 N 的值分別為 2 和 3,表示二維數(shù)組的行數(shù)和列數(shù)。在主函數(shù)中定義整型數(shù)組 a[M][N]和 b[M][N],它們的初值可取上述示例值。定義三個(gè)matadd 類的對(duì)象 A、B 和 C,并用數(shù)組 a 和 b 初始化對(duì)象 A 和 B。將 A 加B 后賦值給 C。然后輸出對(duì)象 C 的數(shù)據(jù)成員 a 矩陣的值。
實(shí) 驗(yàn) 過 程(算法、源代碼以及注釋)
實(shí) 驗(yàn) 結(jié) 果(記錄程序執(zhí)行的結(jié)果,分析結(jié)果)
實(shí) 驗(yàn) 總 結(jié)(記錄程序在調(diào)試過程中出現(xiàn)的問題以及解決方法、總結(jié)收獲和心得)
第二篇:C++實(shí)驗(yàn)報(bào)告
姓名:XX 學(xué)院:XXX 班級(jí):XXX 學(xué)號(hào):XXX
i++;
} while(i<=10);cout<<“sum=”< #include for(i;i<=10,i++) { sum+=i; } cout<<“sum=”< cout<<“不是合法的輸入”< 實(shí)驗(yàn) 三、函數(shù)的應(yīng)用(2學(xué)時(shí)) 1、實(shí)驗(yàn)?zāi)康模?/p> 掌握函數(shù)的定義和調(diào)用方法。練習(xí)重載函數(shù)使用。練習(xí)函數(shù)模板的使用 練習(xí)使用系統(tǒng)函數(shù)。 在main()函數(shù)中提示輸入兩個(gè)整數(shù)x,y,使用cin語句得到x,y的值,調(diào)用pow(x,y)函數(shù)計(jì)算x的y次冪的結(jié)果,再顯示出來。程序名:lab3_4.cpp。 編寫遞歸函數(shù)int fib(int n),在主程序中輸入n的值,調(diào)用fib函數(shù)計(jì)算Fibonacci級(jí)數(shù)。公式為fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if語句判斷函數(shù)的出口,在程序中用cout語句輸出提示信息。程序名:lab3_5.cpp。 7)調(diào)試操作步驟如下: 選擇菜單命令Build|Start Debug |Step In,系統(tǒng)進(jìn)入單步執(zhí)行狀態(tài),程序開始運(yùn)行,并出現(xiàn)一個(gè)DOS窗口,此時(shí)光標(biāo)停在main()函數(shù)的入口處。 把光標(biāo)移到語句answer=fib(n)前,從Debug菜單單擊Run To Cursor,在程序運(yùn)行的DOS窗口中按提示輸入數(shù)字10,這時(shí)回到可視界面中,光標(biāo)停在第11行,觀察一下n的值。 從Debug菜單中單擊Step Into,程序進(jìn)入fib函數(shù),觀察一下n的值,把光標(biāo)移到語句return(fib(n-2)+fib(n-1))前,從Debug菜單單擊Run to Cursor,再單擊Step Into,程序遞歸調(diào)用fib函數(shù),又進(jìn)入fib函數(shù),觀察n的值。 繼續(xù)執(zhí)行程序,參照上述的方法,觀察程序的執(zhí)行順序,加深對(duì)函數(shù)調(diào)用和遞歸調(diào)用的理解。 再試試Debug菜單欄中的別的菜單項(xiàng),熟悉Debug的各種方法。 4、實(shí)驗(yàn)原理 C++中函數(shù)的重載使得同樣的函數(shù)名下,只要參數(shù)類型、數(shù)目不同時(shí),即可根據(jù)輸入的數(shù)據(jù)進(jìn)行相應(yīng)的函數(shù)調(diào)用,使用起來簡單方便。 5、思考與體會(huì) C++中,函數(shù)的運(yùn)用與之前學(xué)過的C語言既有相同之處,也有著不同的地方。相同的地方在于格式、用法等框架上的不變。但是C語言中對(duì)于同樣的函數(shù)名是只能夠申明一種函數(shù)的,倘若有相同的函數(shù)名出現(xiàn)系統(tǒng)即會(huì)報(bào)錯(cuò),所以用起來有時(shí)是極為不便 0 //參數(shù)為兩個(gè)雙精度浮點(diǎn)形的函數(shù) int max1(double a,double b){ a=a>b?a:b;return a;} //參數(shù)為三個(gè)雙精度浮點(diǎn)形的函數(shù) int max1(double a,double b,double c){ a=a>b?a:b;a=a>c?a:c;return a;} void main(void){ int a;double b;a=max1(1,2);cout< Lab3_3: #include int main(){ int i,j,k;cout<<“請(qǐng)輸入要比較的3個(gè)數(shù): ”< 2131415 public: Rank rank;int frequency;float voltage;CPU(Rank r,int f,float v){ //構(gòu)造函數(shù) cout<<“構(gòu)造了一個(gè)CPU”< rank=r; frequency=f; voltage=v;} void run(){ cout<<“CPU開始運(yùn)行”< } void stop(){ cout<<“CPU停止運(yùn)行”< cout<<“RANK=”< cout<<“frequency=”< cout<<“voltage=”< }; int main(){ CPU cpu(p5,500,2000);cpu.run();cpu.show();cpu.stop();return 0;} Lab4_2 #include //析構(gòu)函數(shù)-17 computer(Rank r,int f,float v){ CPU cpu(r,f,v); //定義CPU對(duì)象 RAM ram(1); //定義RAM對(duì)象 CDROM cdrom(1); //定義CDROM對(duì)象 cpu.run(); cpu.show(); cpu.stop();} };int main(){ computer com(p4,300,3000);return 0;} 實(shí)驗(yàn) 七、繼承與派生(一、二)4學(xué)時(shí) 1、實(shí)驗(yàn)?zāi)康模?/p> 學(xué)習(xí)定義和使用類的繼承關(guān)系,定義派生類。熟悉不同繼承方式下對(duì)基類成員的訪問控制。學(xué)習(xí)利用虛基類解決二義性問題 2、實(shí)驗(yàn)任務(wù) a)定義一個(gè)基類Animal,有私有整型成員變量age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(int n)中直接給age賦值,看看會(huì)有什么問題,把a(bǔ)ge改為公有成員變量,還會(huì)有問題嗎?編程試試看。b)定義一個(gè)基類BaseClass,有整型成員變量Number ,構(gòu)造其派生類DerivedClass,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。c)定義一個(gè)車(vehicle)基類,具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車類有高度(height)等屬性,汽車類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle)類,在繼承過程中,注意把vehicle設(shè)置為虛基類。如果不把vehicle設(shè)置為虛基類,會(huì)有什么問題?編程試試看。 3、實(shí)驗(yàn)步驟 編寫程序定義基類Animal,成員變量age定義為私有的。構(gòu)造派生類dog,在其成員函數(shù)SetAge(int n)中直接對(duì)age賦值時(shí),會(huì)出現(xiàn)類似以下的錯(cuò)誤提示: error C2248:’age’:cannot access private member declared in class ‘Animal’ error C2248:’age’:cannot access private member declared in class ‘Animal’ 把a(bǔ)ge改為公有成員變量后重新編譯就可以了。程序名為:lab7_1.cpp 0 確方便我們編程。 6、部分參考代碼 Lab7_1 #include class Animal{ public: int age;}; class dog:public Animal{ public: int SetAge(int n){ age=n; return age;} }; void main(void){ int age;dog d;age=d.SetAge(3);cout<<“age=”< Lab7_2 #include cout<<“這是父類的構(gòu)造函數(shù)”< cout<<“這是父類的析構(gòu)函數(shù)”< //Motorcycle繼承bicycle和motorcar類 class motorcycle:public bicycle,public motorcar{ public: motorcycle(int seat,double H,double MS,double W){ SeatNum=seat; height=H; MaxSpeed=MS; Weight=W;} void show(){ cout<<“seatnum=”< cout<<“height=”< cout<<“MaxSpeed=”< cout<<“weight=”< int main(){ motorcycle che(3,30.33,90.84,500);che.show();return 0;} 實(shí)驗(yàn) 八、多態(tài)性2學(xué)時(shí) 1、實(shí)驗(yàn)?zāi)康模?/p> 掌握運(yùn)算符重載的方法 習(xí)使用虛函數(shù)實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性。 2、實(shí)驗(yàn)任務(wù) a)定義Point類,有坐標(biāo)x,y兩個(gè)成員變量;對(duì)Point類重載“++”、“--”運(yùn)算符,實(shí)現(xiàn)對(duì)坐標(biāo)值的改變。 定義一個(gè)車(vehicle)基類,有Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類,從bicycle和motorcar派生出摩托車(motorcycle)類,它們都有Run、Stop等成員函數(shù)。觀察虛函的作用。 3、實(shí)驗(yàn)步驟 編寫程序定義Point類,在類中定義整型的私有成員變量x,y,定義成員函數(shù)Point& operator++();Point operator++(int);以實(shí)現(xiàn)對(duì)Point類重載“++”運(yùn)算符,定義成函數(shù)Point& operator –();Point operator 也就是函數(shù)的重載。 6、部分參考代碼 Lab8_1 #include class Point{ public: Point(double x=0.0,double y=0.0):xray(x),yray(y){} Point operator++(int);Point operator--(int);void show();private: double xray;double yray;}; Point Point::operator++(int){ return Point(xray++,yray++);} Point Point::operator--(int){ return Point(xray--,yray--);} void Point::show(){ cout<<“x坐標(biāo)為”< int main(){ Point p(4.5,6.5);cout<<“進(jìn)行運(yùn)算前的情況:”< show(&v);return 0;} 第二次上機(jī)實(shí)驗(yàn)報(bào)告 姓名:王小寧 班級(jí): 學(xué)號(hào): 031012 1234 第一題: 題目: 編寫一個(gè)類,聲明一個(gè)數(shù)據(jù)成員和一個(gè)靜態(tài)數(shù)據(jù)成員,其構(gòu)造函數(shù)初始化數(shù)據(jù)成員,并把靜態(tài)數(shù)據(jù)成員加1,其析構(gòu)函數(shù)把靜態(tài)數(shù)據(jù)成員減1.(1)編寫一個(gè)應(yīng)用程序,創(chuàng)建該類的3個(gè)對(duì)象,然后顯示其數(shù)據(jù)成員和靜態(tài)數(shù)據(jù)成員,再析構(gòu)每個(gè)對(duì)象,并顯示它們對(duì)靜態(tài)數(shù)據(jù)成員的影響。 (2)修改該類,增加靜態(tài)成員函數(shù)并訪問靜態(tài)數(shù)據(jù)成員,并聲明靜態(tài)數(shù)據(jù)成員為保護(hù)成員。體會(huì)靜態(tài)成員函數(shù)的使用,靜態(tài)成員之間與非靜態(tài)成員之間互訪問題。 編程思想: 首先,定義一個(gè)類,其中含有兩個(gè)類的私有變量,一個(gè)靜態(tài)數(shù)據(jù)變量,定義構(gòu)造函數(shù),將初值賦給兩個(gè)私有變量,并將靜態(tài)數(shù)據(jù)變量加1,并顯示.定義一個(gè)析構(gòu)函數(shù),并通過析構(gòu)函數(shù)將靜態(tài)成員變量減1.并顯示。 修改以上的類,增加一個(gè)靜態(tài)成員函數(shù)并通過靜態(tài)成員函數(shù)來訪問靜態(tài)成員變量。在主函數(shù)中利用一個(gè)指向函數(shù)的指針指向這個(gè)靜態(tài)成員函數(shù),并通過這個(gè)指針來訪問類中的靜態(tài)數(shù)據(jù)。代碼實(shí)現(xiàn): 代碼1: #include static int count; A(int a=0,int b=0) { X=a; Y=b; count++; cout<<“startcount=”< count--; cout<<“overcount=”< int GetX(){return X;} int GetY(){return Y;} private: int X,Y;};int A::count=0;int main(){ int *countp=&A::count;A z(2,3);cout<<“x=”< cout<<“x=”< 問題及心得: 在這次試驗(yàn)中,我理解了靜態(tài)變量與普通變量之間的差異與聯(lián)系。在實(shí)驗(yàn)過程中因未初靜態(tài)變量始化而無法通過編譯,并且注意到靜態(tài)變量一定要在類外初始化。 題目2: 創(chuàng)建一個(gè)Person類,該類中有字符數(shù)組,表示姓名、街道地址、市、省和郵政編碼。其功能有修改姓名、顯示數(shù)據(jù)信息。要求其功能函數(shù)的原型放在類定義中,構(gòu)造函數(shù)初始化每個(gè)成員,顯示信息函數(shù)要求把對(duì)象中的完整信息打印出來。其中數(shù)據(jù)成員為保護(hù)的,函數(shù)為公有的。 編程思想: 創(chuàng)建一個(gè)PERSON類,定義姓名、街道地址、市、省和郵政編碼分別為CHAR型的指針?biāo)接行妥兞?。在定義公有型的構(gòu)造函數(shù),并在構(gòu)造函數(shù)中申請(qǐng)動(dòng)態(tài)內(nèi)存來保存初始化的內(nèi)容,并用相應(yīng)的私有性的指針變量指向,再利用復(fù)制函數(shù)則指針中將會(huì)存放入輸入內(nèi)容。定義公有的析構(gòu)函數(shù)釋放動(dòng)態(tài)申請(qǐng)的空間。定義一個(gè)公有的改變函數(shù)改變其中一個(gè)變量,方法與構(gòu)造函數(shù)相似。 代碼實(shí)現(xiàn): #include private: char *name;char *street;char *pro;char *city;char *code; public: Person(char *aname,char *astreet,char *apro,char *acity,char *acode){ name=new char[strlen(aname)+1]; strcpy(name,aname); street=new char[strlen(astreet)+1]; strcpy(street,astreet); pro=new char[strlen(apro)+1]; strcpy(pro,apro); city=new char[strlen(acity)+1]; strcpy(city,acity); code=new char[strlen(acode)+1]; strcpy(code,acode); cout<<“constructor”< delete[] name; delete[] street; delete[] pro; delete[] city; delete[] code; cout<<“destructor”< delete[] name; name=new char[strlen(aname)+1]; strcpy(name,aname);} void show(){ cout<<“姓名:”< cout<<“街道地址:”< cout<<“省份:”< cout<<“城市:”< cout<<“郵政編碼:”< 運(yùn)行結(jié)果: 實(shí)驗(yàn)心得: 通過這個(gè)實(shí)驗(yàn),我們學(xué)會(huì)了對(duì)類的私有的字符數(shù)組變量的初始化。利用指針動(dòng)態(tài)分配空間。 C++上機(jī)實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)名稱:實(shí)驗(yàn) 專業(yè)班級(jí): 姓 名: 學(xué) 號(hào): 實(shí)驗(yàn)日期: 11 實(shí)驗(yàn) 目錄 1.實(shí)驗(yàn)?zāi)康?/p> 2.實(shí)驗(yàn)內(nèi)容 3.程序代碼 4.調(diào)試結(jié)果 5.實(shí)驗(yàn)心得 1.實(shí)驗(yàn)?zāi)康?實(shí)驗(yàn)10(1)進(jìn)一步了解運(yùn)算符重載的概念和使用方法;(2)掌握幾種常用的運(yùn)算符重載的方法;(3)了解轉(zhuǎn)換構(gòu)造函數(shù)的使用方法; (4)了解在Visual C++6.0環(huán)境下進(jìn)行運(yùn)算符重載要注意的問題。實(shí)驗(yàn)11(1)了解繼承在面向?qū)ο蟪绦蛟O(shè)計(jì)中的重要作用;(2)進(jìn)一步理解繼承和派生的概念; (3)掌握通過繼承派生出一個(gè)新的類的方法;(4)了解虛基類的作用和用法。 2.實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)10 事先編好程序,上機(jī)進(jìn)行調(diào)試和運(yùn)行程序,分析結(jié)果。(1)聲明一個(gè)復(fù)數(shù)類Complex,重載運(yùn)算符“+”,“-”,“*”,“/”,使之能用于復(fù)數(shù)的加,減,乘,除,運(yùn)算符重載函數(shù)作為Complex類成員的函數(shù)。編程序,分別求兩個(gè)復(fù)數(shù)之和,差,積和商。(2)聲明一個(gè)復(fù)數(shù)類Complex,重載運(yùn)算符“+”,使之能用于復(fù)數(shù)的加法運(yùn)算。參加運(yùn)算的兩個(gè)運(yùn)算量可以都是類對(duì)象,也可以其中有一個(gè)是整數(shù),順序任意。 運(yùn)行程序,分別求兩個(gè)復(fù)數(shù)之和,整數(shù)和復(fù)數(shù)之和,(3)有兩個(gè)矩陣a和b,均為2行3列。求兩個(gè)矩陣之和。重載運(yùn)算符“+”,使之能用于兩個(gè)矩陣相加 (4)聲明一個(gè)Teacher(教師)類和一個(gè)Student(學(xué)生)類,二者有一部分?jǐn)?shù)據(jù)成員是相同的,例如num(號(hào)碼),name(名字),sex(性別)。編寫程序,將一個(gè)Student對(duì)象(學(xué)生)轉(zhuǎn)換為Teacher(教師)類,只將以上三個(gè)相同的數(shù)據(jù)成員移植過去。可以設(shè)想為:一位學(xué)生大學(xué)畢業(yè)了,留校擔(dān)任教師,他原有的部分?jǐn)?shù)據(jù)對(duì)現(xiàn)在的教師身份來說任然是有用的,應(yīng)當(dāng)保留并成為其教師的數(shù)據(jù)的一部分。 實(shí)驗(yàn)11 事先編寫好程序,上機(jī)調(diào)試和運(yùn)行程序,分析結(jié)果。 (1)將教材第11章例11.1的程序片段補(bǔ)充和改寫成一個(gè)完整的、正確的程序,用公用繼承方式。在程序中應(yīng)當(dāng)包括輸入數(shù)據(jù)的函數(shù),在程序運(yùn)行時(shí)輸入num,name,sex,age,addr的值,程序應(yīng)輸出以上5個(gè)數(shù)據(jù)的值。 (2)將教材第11章例11.3的程序修改、補(bǔ)充,寫成一個(gè)完整、正確的程序,用保護(hù)繼承方式。在程序中應(yīng)包括輸入數(shù)據(jù)的函數(shù)。(3)修改上面第(2)題的程序,改為用公用繼承方式。上機(jī)調(diào)試程序,使之能夠正確運(yùn)行并得到正確的結(jié)果。 對(duì)這兩種繼承方式做比較分析,考慮在什么情況下二者不能互相替換。 (4)分別聲明Teacher(教師)類和Cadre(干部)類,采用多 重繼承方式由這兩個(gè)類派生出新類Teacher-Cadre(教師兼干部)。要求: Ⅰ.在兩個(gè)基類中都包含姓名、年齡、性別、地址、電話等數(shù)據(jù)成員。 Ⅱ.在Teacher類中還包含數(shù)據(jù)成員title(職稱),在Cadre類中還包含數(shù)據(jù)成員post(職務(wù))。在Teacher-Cadre類中還包含數(shù)據(jù)成員wages(工資)。 Ⅲ.在基類中的姓名、年齡、性別、地址、電話等數(shù)據(jù)成員用相同的名字,在引用這些數(shù)據(jù)成員時(shí),指定作用域。Ⅴ.在類體中聲明成員函數(shù),在類外定義成員函數(shù)。 Ⅵ.在派生類Teacher-Cadre的成員函數(shù)show中調(diào)用Teacher類中的display函數(shù),輸出性命、年齡、性別、職稱、地址、電話,然后再用cout語句輸出職務(wù)與工資。 3.程序代碼 實(shí)驗(yàn)10(1) #include Complex Complex::operator +(Complex &c2){Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;} Complex Complex::operator-(Complex &c2){Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;} Complex Complex::operator*(Complex &c2){Complex c;c.real=real*c2.real-imag*c2.imag;c.imag=imag*c2.real+real*c2.imag;return c;} Complex Complex::operator/(Complex &c2){Complex c;c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);return c;} void Complex::display(){cout<<“(”< (2) #include double real; double imag;}; Complex Complex::operator+(Complex &c){return Complex(real+c.real,imag+c.imag);} Complex Complex::operator+(int &i){return Complex(real+i,imag);} void Complex::display(){cout<<“(”< Complex operator+(int &i,Complex &c){return Complex(i+c.real,c.imag);} int main(){Complex c1(3,4),c2(5,-10),c3;int i=5;c3=c1+c2;cout<<“c1+c2=”;c3.display();c3=i+c1;cout<<“i+c1=”;c3.display();c3=c1+i;cout<<“c1+i=”;c3.display();return 0;}(3) #include int mat[2][3];}; Matrix::Matrix(){for(int i=0;i<2;i++)for(int j=0;j<3;j++)mat[i][j]=0;} Matrix operator+(Matrix &a,Matrix &b){Matrix c;for(int i=0;i<2;i++)for(int j=0;j<3;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];} return c;} void Matrix::input(){cout<<“input value of matrix:”< void Matrix::display(){for(int i=0;i<2;i++){for(int j=0;j<3;j++){cout< #include int num; char name[20]; char sex; float score;}; Student::Student(int n,char nam[],char s,float sco){num=n;strcpy(name,nam);sex=s;score=sco;} class Teacher {public: Teacher(){} Teacher(Student&);Teacher(int n,char nam[],char sex,float pay);void display();private: int num; char name[20]; char sex; float pay;}; Teacher::Teacher(int n,char nam[],char s,float p} {num=n;strcpy(name,nam);sex=s;pay=p;} Teaxher::Teacher(Student& stud){num=stud.get_num();strcpy(name,stud.get_name());sex=stud.get.sex();pay=1500;} void Teacher::display(){cout<<“num:”< #include void get_value() {cin>>num>>name>>sex;} void display() {cout<<”num:“< cout<<”sex:“< int num; char name[10];char sex;}; class Student1:public Student {public: void get_value_1(){get_value();cin>>age>>addr;} void display_1(){cout<<”age:“< char addr[30];}; int main(){Student1 stud1;stud1.get_value_1();stud1.display();stud1.display_1();return 0;}(2) #include void display();protected: int num; char name[10]; char sex;}; void Student::get_value(){cin>>num>>name>>sex;} void Student::display(){cout<<”num:“< class Student1:protected Student {public: void get_value_1();void display1();private: int age;char addr[30];}; void Student1::get_value_1(){get_value();cin>>age>>addr;} void Student1::display1(){cout<<”num:“< int main(){Student1 stud1;stud1.get_value_1();stud1.display1();return 0;}(3) #include int num; char name[10]; char sex;}; void Student::get_value(){cin>>num>>name>>sex;} void Student::display(){cout<<”num:“< class Student1:public Student {public: void get_value_1();void display1();private: int age; char addr[30];}; void Student1::get_value_1(){get_value();cin>>age>>addr;} void Student1::display1(){cout<<”num:“< int main(){Student1 stud1;stud1.get_value_1();stud1.display1();return 0;}(4) #include Teacher(int,char[],char);void display();private: int num;char name[20];char sex;}; Teacher::Teacher(int n,char nam[],char s){num=n;strcpy(name,nam);sex=s;} void Teacher::display(){cout<<”num:”< class BirthDate {public: BirthDate(int,int,int);void display();void change(int,int,int);private: int year;int month;int day;}; BirthDate::BirthDate(int y,int m,int d){year=y;month=m;day=d;} Void BithDate::display(){cout<<”birthday:”< void BirthDate::change(int y,int m,int d){year=y;month=m;day=d;} class Professor:public Teacher {public: Professor(int,char[],char,int,int,int,float);void display();void change(int,int,int);private: float area;BirthDate birthday;} Professor::Professor(int n,char name[20],char s,int y,int m,int d,float a): Teacher(n,name,s),birthday(y,m,d),area(a){} void Professor::display(){Teacher::display();birthday.display();cout<<”area:”< Int main(){Professor profl(3012,”Zhang”,’f’,1949,10,1,125.4);cout< 4.調(diào)試結(jié)果 實(shí)驗(yàn)10(1)c1+c2=(8,-6i)c1-c2=(-2,14i)c1*c2=(55,-10i)c1/c2=(-0.2,0.4)(2)c1+c2=(8,-6i)i+c1=(8,4i)c1+i=(8,4i) (3) input value of Matrix:11 22 33 44 55 66 input value of Matrix:12 13 14 15 16 17 Matrix a: 11 22 33 44 55 66 Matrix b: 12 13 14 15 16 17 Matrix c=Matrix a + Matrix b : 23 25 47 59 71 83 (4)student1 : num :20010 name:Wang sex:m score;89.5 Teacher2: num:20010 name:Wang sex:m pay:1500 實(shí)驗(yàn)11(1) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (2) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (3) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (4)The original data: num:3012 name:Zhang sex:f area:125.4 The new data: num:3012 name:Zhang sex:f birthday:6/1/1950 area:125.4 5.實(shí)驗(yàn)心得 這一次上機(jī)實(shí)驗(yàn),除了了解到了運(yùn)算符重載的概念和用法,掌握幾種常用的運(yùn)算符重載的方法,了解轉(zhuǎn)換構(gòu)造函數(shù)的使用方法,同時(shí)也能了解虛基類的用法,理解繼承與派生的概念。 但是,最主要的,我覺得,是通過這一次的上機(jī)實(shí)驗(yàn),我了解到,有的實(shí)驗(yàn)本身是沒有程序錯(cuò)誤的,但是,也會(huì)由于實(shí)驗(yàn)環(huán)境的影響而不能正常運(yùn)行。換句話說,有的程序并不能在Visaul C++的環(huán)境下運(yùn)行,而不是程序自身的問題。所以,對(duì)于沒辦法調(diào)試成功的程序,我們也不能一味的認(rèn)為程序有錯(cuò)誤,要學(xué)會(huì)理性的判斷程序的對(duì)錯(cuò),再下結(jié)論。 注意:以下藍(lán)色文字部分根據(jù)情況增刪 實(shí)驗(yàn)1熟悉VC++6.0集成開發(fā)環(huán)境 一、實(shí)驗(yàn)時(shí)間: 2011年9月20日 二、實(shí)驗(yàn)地點(diǎn): 第7機(jī)房 三、指導(dǎo)教師: 鄧譜 四、實(shí)驗(yàn)?zāi)康模?/p> 1.了解VC++6.0的主要特點(diǎn); 2.熟悉VC++6.0的集成開發(fā)環(huán)境; 3.學(xué)習(xí)用VC++6.0編寫簡單的C++應(yīng)用程序,掌握C++程序的上機(jī)調(diào)試步驟。 五、實(shí)驗(yàn)內(nèi)容: 1.P19 第1題:在屏幕上輸出字符串“歡迎大家學(xué)習(xí)VC++6.0!” ? 【編程思想】 ? 【流程圖】 ? 【源程序】見上機(jī)作業(yè)“實(shí)驗(yàn)11_11_1.cpp” 問題1:不知道如何在VC++6.0里輸入源程序 解決方法: (1)首先建立“Win32 Console Application”工程; (2)再向工程中添加源文件; (3)在添加的源文件中輸入代碼。 以上的詳細(xì)操作流程見“Visual C++ 6.0集成開發(fā)環(huán)境.doc”文件。 問題2:error LNK2001: unresolved external symbol _WinMain@16:連接錯(cuò)誤2001:未解決的外部符號(hào)_WinMain@16 問題原因:創(chuàng)建工程時(shí)選的創(chuàng)建“Win32 Application”,這是創(chuàng)建圖形用戶界面的C++工程,而程序是字符界面,兩者不一致導(dǎo)致該錯(cuò)誤。 解決方法:創(chuàng)建工程時(shí)應(yīng)選“Win32 Console Application” 問題3:error C1010: unexpected end of file while looking for precompiled header directive:錯(cuò)誤C1010:在查找預(yù)編譯頭時(shí)遇到意外的文件結(jié)尾。 問題原因:在選擇創(chuàng)建工程種類時(shí)選擇了“a simple application”,該工程還包含stdafx..h和stdafx..cpp兩個(gè)文件,這兩個(gè)文件是為編譯系統(tǒng)進(jìn)行預(yù)編譯服務(wù)的,需要在源程序開始部分使用#include “stdafx.h”進(jìn)行引用,如果未進(jìn)行引用,會(huì)導(dǎo)致該錯(cuò)誤。 解決方法1:在選擇創(chuàng)建工程種類時(shí)選擇第一項(xiàng)“an empty project” 解決方法2:如果工程文件列表中(窗口左邊)有stdafx..h和stdafx..cpp兩個(gè)文件,則源程序開始要使用#include “stdafx.h”進(jìn)行引用。 問題4:error C2143: syntax error : missing ';' before '}':錯(cuò)誤C2143:語法錯(cuò)誤:在'}'之前丟失了';' 問題5:…… 2.P19 第2題:求兩個(gè)整數(shù)之和 …… 六、實(shí)驗(yàn)總結(jié): (將實(shí)驗(yàn)過程中或?qū)W習(xí)本章節(jié)的上機(jī)過程中值得記錄的內(nèi)容按1.2.3.分條寫下來)第三篇:C++上機(jī)實(shí)驗(yàn)報(bào)告
第四篇:C++上機(jī)實(shí)驗(yàn)報(bào)告
第五篇:《C++程序設(shè)計(jì)》實(shí)驗(yàn)報(bào)告范例