1. 程式人生 > >實驗3

實驗3

wid uml 問題 real 清理 height eight 描述 源代碼

南京信息工程大學實驗報告

實驗名稱:類和對象 實驗日期:2018-4-3 得分: 指導老師:耿學華 系:計軟院 專業:計嵌 年級:2017級 班次:(1) 姓名:趙業康 學號:20178303035

實驗結論

1.驗證性實驗

(1)類:在面向對象程序設計中,類構成程序模塊。類是對邏輯上相關的函數與數據的封裝,它是對問題的抽象描述,描述了一類事物的共同屬性和行為。

(2)對象:類的對象是該類的某一特定實體,也就是實例化的類。

(3)構造函數:構造函數的作用是在對象被創建時利用特定的值構造對象,將對象初始化為一個特定的狀態,且構造函數在對象被創建時將被自動調用。

(4)復制構造函數:是一種特殊的構造函數,具有一般構造函數的所有特性,其形參是本類的對象的引用。其作用是使用一個已經存在的對象(由復制構造函數的參數指定),去初始化同類的一個新對象。

(5)析構函數:析構函數用來完成對象被刪除前的一些清理工作,析構函數是在對象的生存期即將結束的時刻被自動調用的,析構函數不接收任何參數。

2.編程實驗部分

(1)習題4-11

源代碼:

#include<iostream>
using
namespace 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