C++基礎學習之物件和類(7)
阿新 • • 發佈:2018-11-02
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;
}