實驗3
南京信息工程大學實驗報告
實驗名稱:類和對象 實驗日期:2018-4-3 得分: 指導老師:耿學華 系:計軟院 專業:計嵌 年級:2017級 班次:(1) 姓名:趙業康 學號:20178303035
實驗結論
1.驗證性實驗
(1)類:在面向對象程序設計中,類構成程序模塊。類是對邏輯上相關的函數與數據的封裝,它是對問題的抽象描述,描述了一類事物的共同屬性和行為。
(2)對象:類的對象是該類的某一特定實體,也就是實例化的類。
(3)構造函數:構造函數的作用是在對象被創建時利用特定的值構造對象,將對象初始化為一個特定的狀態,且構造函數在對象被創建時將被自動調用。
(4)復制構造函數:是一種特殊的構造函數,具有一般構造函數的所有特性,其形參是本類的對象的引用。其作用是使用一個已經存在的對象(由復制構造函數的參數指定),去初始化同類的一個新對象。
(5)析構函數:析構函數用來完成對象被刪除前的一些清理工作,析構函數是在對象的生存期即將結束的時刻被自動調用的,析構函數不接收任何參數。
2.編程實驗部分
(1)習題4-11
源代碼:
#include<iostream> usingnamespace std; class Rectangle { public: Rectangle(float l, float w);//自定義構造函數 Rectangle(Rectangle &t); //復制構造函數 ~Rectangle(); //析構函數 float area(); //area函數計算矩形面積 private: float length, width; }; Rectangle::Rectangle(float l, float w) { //構造函數的實現 length = l; width= w; } Rectangle::Rectangle(Rectangle &t) { //復制構造函數的實現 width = t.width; length = t.length; } float Rectangle::area() { //area函數的實現 return length * width; } Rectangle::~Rectangle() { //析構函數的實現 cout << "destuctor is called." << endl; } int main(){ float length,width; cout << "請輸入巨形的長和寬:"; cin >> length >> width; Rectangle rec1(length, width); Rectangle rec2(rec1); float s = rec2.area(); cout << "矩形的面積為:" << s << endl; return 0; }
運行結果:
(2)習題4-20
源代碼:
#include<iostream> using namespace std; class Complex { public: Complex(double r0, double i0);//自定義構造函數(復數) Complex(double r0); //函數重載(實數) Complex(Complex &c0); //復制構造函數 void add(Complex &c0); //類成員函數 void show(); private: double real, imaginary; }; Complex::Complex(double r0, double i0) {//構造函數的實現 real = r0; imaginary = i0; } Complex::Complex(double r0) { //重載函數的實現 real = r0; } Complex::Complex(Complex &c0) { //復制構造函數的實現 real = c0.real; } void Complex::add(Complex &c0) { //add函數的實現 real = real + c0.real; //c1與c2相加,結果保存在c1中 } void Complex::show() { cout << real << "+" << imaginary << "i" << endl;//show函數的實現 } int main() { double r0, i0, r1; cout << "請輸入復數的實部和虛部:"; cin >> r0 >> i0; cout << "請輸入復數的實部和虛部:"; cin >> r1; Complex c1(r0, i0); Complex c2(r1); Complex c0(c2); c1.add(c0); c1.show(); }
運行結果:
實驗總結與體會:
這次實驗讓我收獲頗豐,通過實驗,我加深了對類、對象、構造函數、復制構造函數和析構函數的認識和了解,但我知道自己遠沒有熟練掌握這些知識。看例題似乎挺簡單,然而自己動手做的時候就感覺壓力很大,這次雖然完成了兩道實驗題,但大部分內容都是仿照這書本上和課件上的例題對照著模仿出來的,即便如此仍然意外頻出。尤其是第二個實驗題,若非有UML圖提示,我只怕要再花上多一倍的時間才能完成,不過這也讓我認識了UML圖的實用之處。看來為了掌握這些知識,日後還要多加練習,方能積累經驗。
實驗3