C++ 類

2018-03-24 15:27 更新

學(xué)習(xí)C++ - C++類

C++關(guān)鍵字類將代碼標(biāo)識(shí)為定義類的設(shè)計(jì)。

語法將Product標(biāo)識(shí)為此類的類型名稱。

設(shè)計(jì)類的第一步是提供類聲明。

語法

類聲明在聲明之后被編碼,并且可以包括數(shù)據(jù)成員和函數(shù)成員。

聲明有一個(gè)私有部分,在該部分中聲明的成員只能通過成員函數(shù)訪問。

聲明還有一個(gè)公共部分,聲明的成員可以使用類對(duì)象直接由程序訪問。

通常,數(shù)據(jù)成員進(jìn)入私有部分,成員函數(shù)進(jìn)入公共部分。

典型的類聲明有這種形式。

class className { 
private: 
     data member declarations 
public: 
     member function prototypes 
}; 

公共部分的內(nèi)容構(gòu)成了設(shè)計(jì)的抽象部分,公共接口。

在私有部分中封裝數(shù)據(jù)保護(hù)數(shù)據(jù)的完整性,并稱為數(shù)據(jù)隱藏。

類設(shè)計(jì)的第二步是實(shí)現(xiàn)類成員函數(shù)。

以下代碼顯示了如何使用成員函數(shù)定義類。


#include <iostream> 
using namespace std; 

class Printer { 
public: 
    // function that displays a welcome message to the Printer user 
    void displayMessage() { 
        cout << "Welcome to the Grade Book!" << endl; 
    }
};
int main() 
 { 
    Printer myPrinter; // create a Printer object named myPrinter 
    myPrinter.displayMessage(); // call object"s displayMessage function 
}

上面的代碼生成以下結(jié)果。

帶參數(shù)的成員函數(shù)

以下代碼顯示了如何使用具有參數(shù)的成員函數(shù)定義類打印機(jī),創(chuàng)建一個(gè)Printer對(duì)象并調(diào)用其displayMessage函數(shù)。


#include <iostream> 
#include <string>
using namespace std; 

class Printer { 
public: 
   void displayMessage( string courseName ) 
    { 
       cout << "Welcome to the grade book for\n" << courseName << "!" 
           << endl; 
    }
};

// function main begins program execution 
int main() 
{ 
    string nameOfCourse; // string of characters to store the course name 
    Printer myPrinter; // create a Printer object named myPrinter 

    cout << "Please enter the course name:" << endl; 
    getline( cin, nameOfCourse ); // read a course name with blanks 
    cout << endl; // output a blank line 

    myPrinter.displayMessage( nameOfCourse ); 
}

上面的代碼生成以下結(jié)果。


設(shè)置函數(shù)和獲取函數(shù)

定義類包含一個(gè)courseName數(shù)據(jù)成員和成員函數(shù)來設(shè)置和獲取其值;

使用這些函數(shù)創(chuàng)建和操作Course對(duì)象。


#include <iostream> 
#include <string> // program uses C++ standard string class 
using namespace std; 

class Course { 
public: 
    void setCourseName( string name ) { 
        courseName = name; // store the course name in the object 
    }

    string getCourseName() { 
        return courseName; // return the object"s courseName 
    }

    void displayMessage() { 
        cout << "Welcome to the grade book for\n" << getCourseName() << "!" 
           << endl; 
    }
private: 
    string courseName; // course name for this Course 
};

int main() { 
    string nameOfCourse; // string of characters to store the course name 
    Course myCourse; // create a Course object named myCourse 

    cout << "Initial course name is: " << myCourse.getCourseName() 
        << endl; 

    cout << "\nPlease enter the course name:" << endl; 
    getline( cin, nameOfCourse ); // read a course name with blanks 
    myCourse.setCourseName( nameOfCourse ); // set the course name 

    cout << endl; // outputs a blank line 
    myCourse.displayMessage(); // display message with new course name 
}

上面的代碼生成以下結(jié)果。

例子

此聲明允許您聲明產(chǎn)品類型的變量,稱為對(duì)象或?qū)嵗?/p>

#include <string> 
class Product  { 
    private: 
         std::string company; 
         long shares; 
         double normal_val; 
         double discount_val; 
         void set_tot() { discount_val = shares * normal_val; } 
    public: 
         void acquire(const std::string & co, long n, double pr); 
         void buy(long num, double price); 
         void sell(long num, double price); 
         void update(double price); 
         void show(); 
};

例如,以下聲明創(chuàng)建兩個(gè)名為computer和toy的Product對(duì)象:

Product computer; 
Product toy; 

您決定存儲(chǔ)的信息在類數(shù)據(jù)成員中,如公司和股份。

例如,電腦公司持有該公司的名稱,該股份成員持有Sally擁有的股份數(shù)量。

訪問控制

私有和公共標(biāo)簽描述了類成員的訪問控制。

任何使用特定類的對(duì)象的程序都可以直接訪問公共部分。

程序只能通過使用public成員函數(shù)訪問對(duì)象的私有成員。

例如,更改Product類的共享成員的唯一方法是使用Product成員函數(shù)之一。

公共成員函數(shù)作為程序和對(duì)象的私有成員之間的代理。

通過程序直接訪問的數(shù)據(jù)絕緣稱為數(shù)據(jù)隱藏。

類設(shè)計(jì)嘗試將公共接口與實(shí)現(xiàn)細(xì)節(jié)分開。

類成員函數(shù)

以下代碼顯示了如何實(shí)現(xiàn)Product類。


#include <iostream> 
#include <string> 

class Product  // class declaration 
{ 
          private: 
               std::string company; 
               long shares; 
               double normal_val; 
               double discount_val; 
               void set_tot() { discount_val = shares * normal_val; } 
          public: 
               void acquire(const std::string & co, long n, double pr); 
               void buy(long num, double price); 
               void sell(long num, double price); 
               void update(double price); 
               void show(); 
};
void Product::acquire(const std::string & co, long n, double pr) { 
     company = co; 
     if (n < 0) 
     { 
         std::cout << "Number of shares can"t be negative; " 
                    << company << " shares set to 0.\n"; 
         shares = 0; 
     } 
     else 
         shares = n; 
     normal_val = pr; 
     set_tot(); 
} 

void Product::buy(long num, double price) 
{ 
         shares += num; 
         normal_val = price; 
         set_tot(); 
} 

void Product::sell(long num, double price) 
{ 
     using std::cout; 
         shares -= num; 
         normal_val = price; 
         set_tot(); 
} 

void Product::update(double price) 
{ 
     normal_val = price; 
     set_tot(); 
} 

void Product::show() 
{ 
     std::cout << "Company: " << company 
                << "  Shares: " << shares << "\n" 
                << "  Share Price: $" << normal_val 
                << "  Total Worth: $" << discount_val << "\n"; 
} 

#include <iostream> 
int main(){ 
     Product computer; 
     computer.acquire("NanoSmart", 20, 12.50); 
     computer.show(); 
     computer.buy(15, 18.125); 
     computer.show(); 
     computer.sell(400, 20.00); 
     computer.show(); 
     computer.buy(300000,40.125); 
     computer.show(); 
     computer.sell(300000,0.125); 
     computer.show(); 
     return 0; 
} 

上面的代碼生成以下結(jié)果。

內(nèi)聯(lián)方法

您可以在類聲明之外定義一個(gè)成員函數(shù),并將其內(nèi)聯(lián)。

為此,您只需在類實(shí)現(xiàn)部分中定義函數(shù)時(shí)使用內(nèi)聯(lián)限定符:

class Product 
{ 
private: 
     ... 
     void set_tot();  // definition kept separate 
public: 
     ... 
}; 

inline void Product::set_tot()  // use inline in definition 
{ 
     discount_val = shares * normal_val; 
} 
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)