C++编程思想 第1卷 第8章 常量 类 编译期间类的常量

本文探讨了如何在C++中为类创建编译期间的常量成员,通过使用`static const`关键字。以一个存放字符串指针的栈为例,详细解释了`size`作为决定数组大小的静态常量的用法,同时介绍了`push()`和`pop()`方法以及常量字符串的处理方式。

如何让一个类有编译期间的常量成员?要求使用另外一个关键字static
static意味着 "不管类的对象被创建多少次,都只有一个实例"

必须在static const定义的地方初始化。

在一个类里创建和使用一个叫做size的static const,这个类表示一个存放
字符串指针的栈

 

//: C08:StringStack.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Using static const to create a 
// compile-time constant inside a class
#include <string>
#include <iostream>
using namespace std;

class StringStack {
  static const int size = 100;
  const string* stack[size];
  int index;
public:
  StringStack();
  void push(const string* s);
  const string* pop();
};

StringStack::StringStack() : index(0) {
  memset(stack, 0, size * sizeof(string*));
}

void StringStack::push(const string* s) {
  if(index < size)
    stack[index++] = s;
}

const string* StringStack::pop() {
  if(index > 0) {
    const string* rv = stack[--index];
    stack[index] = 0;
    return rv;
  }
  return 0;
}

string iceCream[] = {
  "pralines & cream",
  "fudge ripple",
  "jamocha almond fudge",
  "wild mountain blackberry",
  "raspberry sorbet",
  "lemon swirl",
  "rocky road",
  "deep chocolate fudge"
};

const int iCsz = 
  sizeof iceCream / sizeof *iceCream;

int main() {
  StringStack ss;
  for(int i = 0; i < iCsz; i++)
    ss.push(&iceCream[i]);
  const string* cp;
  while((cp = ss.pop()) != 0)
    cout << *cp << endl;
  getchar();
} ///:~

 

size用来决定数组stack的大小
size实际上是一个编译期间常量,隐藏在类中
push()带有const string*参数,pop()返回一个const string*,StringStack
保存const string*

输出
deep chocolate fudge
rocky road
lemon swirl
raspberry sorbet
wild mountain blackberry
jamocha almond fudge
fudge ripple
pralines & cream

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值