類的定義與對象的創建.


類的定義與對象的創建

1.實驗目的

        (1)理解並學會使用類,並創造合適的對象

        (2)掌握在什么場景下需要使用 類

2.實驗內容

        類的定義、類成員的訪問控制、對象、類的成員函數

3.實驗過程

3.1類和對象

Part1.應用場景

類是面向對象程序設計方法的核心,利用類可以實現對數據的封裝和隱蔽。

在面向對象程序設計中,程序模塊是由類構成的。類是對邏輯上相關的函數與數據的封裝,它是對問題的抽象描述。

Part2.定義及代碼

3.1.1類的定義

class 類名稱 { public: 外部接口 protected: 保護型成員 private: 私有成員 };

其中,public、protected、private分別表示對成員的不同訪問控制權限。

注意:在類中可以只聲明函數的原型,函數的實現(即函數體)可以在類外定義。

例:

      時鍾類

class Clock{ publicvoid setTime(int newH,int newM,int newS); void showTime(); privateint hour,minute,second; };  

這里封裝了時鍾的數據和行為,分別稱為Clock類的數據成員和函數成員。

 

3.1.2類成員的訪問控制

 

類的成員包括:數據成員、函數成員。分別描述問題的屬性和行為,是不可分割的兩個方面。

訪問控制屬性(3種):公有類型 public,私有類型 private,保護類型 protected。

特點:①公有類型:公有類型成員定義了類的外部接口在類外只能訪問類的公有成員;

           ②私有類型:后面聲明的是私有成員,如果私有成員緊接着類的名稱,則關鍵字private可以省略。 

         私有成員只能被本類的成員函數訪問,來自類外部的任何訪問都是非法的。保護了數據的安全性。

        (一個類的數據成員都應該聲明為私有成員,使模塊之間的相互作用被降低到最小)

   ③保護類型:保護類型成員和私有成員的性質相似,其差別在於繼承過程中對產生的新類影響不同。

注意:具有不同訪問屬性的成員可以按任意順序出現,修飾訪問屬性的關鍵字也可以多次出現,但是一個成員只能有一種訪問屬性。

 

3.1.3對象

類的對象就是該類的某一特定實體(也稱實例)。

聲明方式:

類名  對象名;

例如:

Clock myClock;

訪問數據成員的一般形式

對象名.數據成員名;//用“.”

調用函數成員的一般形式:

對象名.函數成員名(參數表);//使用“.”

例:

myClock.showTime();

注意:在類的外部只能訪問到類的公有成員;在類的成員函數中,可以訪問到類的全部成員。

 

3.1.4類的成員函數

類的成員函數描述的是類的行為,例如時鍾類的成員函數setTime()和showTime()。成員函數是程序算法的實現部分,是對封裝的數據進行操作的方法。

①成員函數的實現

函數原型的聲明要寫在類體中,原型說明了函數的參數表和返回值類型。而函數的具體實現是寫在類定義之外的。

與普通函數不同,實現成員函數時要指明類的名稱。

具體形式:

返回值類型 類名::函數成員名(參數表){
     函數體
}

例如:

void Clock::setTime(int newH,int newM,int newS){
     hour=newH;
     minute=newM;
     second=newS;
}

void Clock::showTime(){
     cout<<hour<<":"<<minute<<":"<<second<<endl;  
}

可以看出與普通函數不同,類的成員函數名需要用類名來限制,例如 Clock::showTime()。

②成員函數調用中的目的對象

調用一個成員函數和一個普通函數的差異在於,需要使用“.”的操作符指出調用所針對的對象,這一對象在本次調用中稱為目的對象。

在成員函數中可以不使用“.”的操作符而直接引用目的對象的數據成員。

在成員函數中引用其他對象的屬性和調用其他對象的方法時,都需要使用“.”。

③帶默認形參值的成員函數

類的成員函數可以有默認參數值,其調用規則與普通函數相同。

類成員函數的默認值,一定要寫在類定義中,而不能寫在類定義之外的函數實現中。

例:

class Clock{
public:
    void  setTime(int newH=0,int newM=0,int newS=0);
    ......    
};

如果調用這個函數時沒有實參,就會按照默認值將時鍾設置到默認零點。

 

3.1.5內聯成員函數

如果有的成員函數需要被頻繁調用,而且代碼比較簡單,這個函數也可以定義為內聯函數。

聲明方式:

      隱式聲明和顯式聲明

隱式聲明:將函數體直接放在類體內

class Clock{
public:
     void setTime(int newH,int newM;int newS);
     void showTime(){
          cout<<hour<<":"<<minute<<":"<<second<<endl;
}
private:
     int hour,minute,second; 
};

顯式聲明:采用關鍵字inline

inline void Clock::showTime(){
   cout<<hour<<":"<<minute<<":"<<second<<endl;    
}

效果和前面的隱式表達完全相同。

 

3.1.6程序實例

#include<iostream>
using namespace std;
class Clock {
public:
    void setTime(int newH = 0, int newM = 0, int newS = 0);
    void showTime();
private:
    int hour, minute, second;
};
void Clock::setTime(int newH, int newM, int newS) {
    hour = newH;
    minute = newM;
    second = newS;
}
inline void Clock::showTime() {
    cout << hour << ":" << minute << ":" << second << endl;
}
int main()
{
    Clock myClock;
    cout << "First time set and output:" << endl;
    myClock.setTime();
    myClock.showTime();
    cout << "Secong time set and output:" << endl;
    myClock.setTime(8, 30, 30);
    myClock.showTime();
    return 0;
}

分析:

  本程序可分為三個獨立的部分,第一部分是類的Clock定義,第二部分是時鍾類成員函數的具體實現,第三部分是主函數main()。

  這里的成員函數setTime是帶有默認參數值的函數,有三個默認參數。showTime是顯式聲明的內聯成員函數。

  主函數中聲明了一個類的對象myClock,然后用這個對象調用其成員函數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM