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ù)定義類打印機(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é)果。
定義類包含一個(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í)現(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é)果。
您可以在類聲明之外定義一個(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; }
更多建議: