1. 程式人生 > >C++基礎學習之物件和類(7)

C++基礎學習之物件和類(7)

this指標

有時方法可能涉及到兩個物件,這種情況下需要用到this指標。比如Stock類中有一個方法是比較兩個物件的價格值,那麼方法定義如下:

const Stock & topval(const Stock & s) const;

const都是為了表示不對物件中的資料進行修改,但是要讀其中的資料。
this指標是一種特殊的指標,它指向用來調成員函式的物件(this被作為隱藏引數傳遞給方法)。這樣,函式呼叫stock1.topval(stock2)將this設定為stock1物件的地址,使得這個指標可用於topval()方法。一般來說,所有的類方法都將this指標設定為呼叫它的物件的地址。
所以函式原型如下:

const Stock & Stock::topval(const Stock & s) const
{
	if(s.total_val > total_val)
		return s;
	else
		return *this;
}

total_val是this->total_val的簡寫。this是一個指標,所以要返回物件,要使用*this。函式宣告那一行最後的一個const表明這是一個只讀函式。

物件陣列

宣告物件陣列的方法與宣告標準型別陣列相同:

Stock mystuff[4];	// creat an array of 4 Stock objects

這裡的類物件都使用了預設建構函式。如果想使用建構函式初始化陣列,那麼必須為每個元素呼叫建構函式:

const int STKS = 4;
Stock stocks[STKS] = {
	Stock("NanoSmart", 12.5, 20);
	Stock("Boffo Object", 200, 2.0);
	Stock("Monolithic Obelisks", 130, 3.25);
	Stock("Fleep Enterprises", 60, 6.5);
};

如果類包含多個建構函式也可以對不同的元素使用不同的建構函式。

抽象資料型別

用類來建立一個棧(stack)

// stack.h -- class definiton for the stack ADT
#ifndef STACK_H_ #define STACK_H_ typedef unsigned long Item; class Stack { private: enum {MAX = 10}; // constant specific to class Item items[MAX]; int top; public: Stack(); bool isempty() const; bool isfull() const; // push() returns false if stack already is full, true otherwise bool push(const Item & item); // pop() returns false if stack already is empty, true otherwise bool pop(const Item & item); }
// stack.cpp -- Stack member functions
#include "stack.h"
Stack::Stack()	// create an empty stack
{
	top = 0;
}
bool Stack::isempy() const
{
	return top == 0;
}
bool Stack::isfull() const
{
	return top == MAX;
}
bool Stack::push(const Item & item)
{
	if(top < MAX)
	{
		items[top++] = item;
		return true;
	}
	else
		return false;
}
bool Stack::pop(const Item & item)
{
	if(top > 0)
	{
		item = items[--top];
		return true;
	}
	else
		return false;
}