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;
}