【C++】抽象和類(2)--如何實現類成員函數?

目錄

1 實現類成員函數

成員函數的定義有兩個特殊的特徵

類方法的完整 名稱包括類名

類方法可以直接 訪問私有成員!!!

2 代碼示例

stock00.h

stock00.cpp

3. 代碼解析

3.1 成員函數說明 

3.2 內聯方法

3.3 方法使用哪個對象?


請大家回顧第一講:

【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 方法使用哪個對象?

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章