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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值