目錄
請大家回顧第一講:
【C++】抽象和類(1)--OOP編程特性、類規範基本組成、接口是什麼、類與結構的區別
1 實現類成員函數
成員函數的定義有兩個特殊的特徵
- 定義成員函數時,使用作用域解析運算符(::)標識所屬的類
- 類方法可以訪問類的private組件
不同類下面的成員函數名字可以一樣!
void Stock:: update (double price)
void Buffoon:: update()
作用域解析運算符確定了方法定義對應的類的身份
Stock中的其他函數不必使用::就可以使用update(),因爲他們是一個類裏,是可見的
類方法的完整 名稱包括類名
Stock::update()是函數的限定名
update() 是全名的縮寫
類方法可以直接 訪問私有成員!!!
void Stock::show()
{
std::cout << "Company: " << company
<< " Shares: " << shares << "\n"
<< " Share Price: $ " << share_val
<< "Total Worth: $" << total_val << "\n";
}
2 代碼示例
stock00.h
// stock00.h -- Stock class interface
// 版本 00 類的聲明
#ifndef STOCK00_H_
#define STOCK00_H_
#include<string>
class Stock
{
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();
private:
std::string company;
long shares; //股票數量
double share_val; // 每股的價格
double total_val; //股票的總價格
void set_tot()
{
total_val = shares*share_val;
}
};
#endif
stock00.cpp
// stock00.cpp -- 對類stock00.h進行函數描述
// 版本還是00
#include<iostream>
#include"stock00.h"
void Stock::acquire(const std::string & co, long n, double pr)
{
company = co;
if (n < 0)
{
std::cout << "股票數量不能設置爲0; "
<< company << " shares set to 0. \n";
shares = 0;
}
else
{
shares = n;
}
share_val = pr;
set_tot();
}
void Stock::buy(long num, double price)
{
if (num < 0)
{
std::cout << "股票購買數量不能是負數。" << "交易被終止了!!\n";
}
else
{
shares += num;
share_val = price;
set_tot();
}
}
void Stock::sell(long num, double price)
{
using std::cout;
if (num < 0)
{
cout << "股票不能賣負數,你腦筋有問題?" << "中斷交易了";
}
else if (num>shares)
{
cout << "你自己有幾個股票不清楚嗎?你能賣比自己持有還多的股票嗎?!" << "交易終止!!!";
}
else
{
shares -= num;
share_val = price;
set_tot();
}
}
void Stock::update(double price)
{
share_val = price;
set_tot();
}
void Stock::show()
{
std::cout << "Company: " << company
<< " Shares: " << shares << "\n"
<< " Share Price: $ " << share_val
<< "Total Worth: $" << total_val << "\n";
}
3. 代碼解析
3.1 成員函數說明
3.2 內聯方法
定義位於類聲明中的函數都將自動成爲內聯函數,Stock::set_tot是一個內聯函數。
類聲明常將短小的成員函數作爲內聯函數。
如果願意,可以在類聲明外定義成員函數,成爲內聯函數。需要使用inline
class Stock
{
private:
...
void set_tot(); //類聲明外面定義成員函數
public:
...
};
inline void Stock::set_tot() //使用內聯函數
{
total_val = shares * share_val;
}
3.3 方法使用哪個對象?